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.
- package/LICENSE +21 -0
- package/README.md +194 -0
- package/dist/__tests__/sampleBook.d.ts +17 -0
- package/dist/__tests__/sampleBook.d.ts.map +1 -0
- package/dist/__tests__/sampleBook.js +103 -0
- package/dist/__tests__/sampleBook.js.map +1 -0
- package/dist/epubcheck.test.d.ts +2 -0
- package/dist/epubcheck.test.d.ts.map +1 -0
- package/dist/epubcheck.test.js +69 -0
- package/dist/epubcheck.test.js.map +1 -0
- package/dist/fixed/fixed.test.d.ts +2 -0
- package/dist/fixed/fixed.test.d.ts.map +1 -0
- package/dist/fixed/fixed.test.js +225 -0
- package/dist/fixed/fixed.test.js.map +1 -0
- package/dist/fixed/fontUse.d.ts +21 -0
- package/dist/fixed/fontUse.d.ts.map +1 -0
- package/dist/fixed/fontUse.js +82 -0
- package/dist/fixed/fontUse.js.map +1 -0
- package/dist/fixed/index.d.ts +3 -0
- package/dist/fixed/index.d.ts.map +1 -0
- package/dist/fixed/index.js +254 -0
- package/dist/fixed/index.js.map +1 -0
- package/dist/fixed/outline.d.ts +40 -0
- package/dist/fixed/outline.d.ts.map +1 -0
- package/dist/fixed/outline.js +88 -0
- package/dist/fixed/outline.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/package/pack.d.ts +25 -0
- package/dist/package/pack.d.ts.map +1 -0
- package/dist/package/pack.js +253 -0
- package/dist/package/pack.js.map +1 -0
- package/dist/package/pack.test.d.ts +2 -0
- package/dist/package/pack.test.d.ts.map +1 -0
- package/dist/package/pack.test.js +164 -0
- package/dist/package/pack.test.js.map +1 -0
- package/dist/package/read.d.ts +15 -0
- package/dist/package/read.d.ts.map +1 -0
- package/dist/package/read.js +198 -0
- package/dist/package/read.js.map +1 -0
- package/dist/package/strings.d.ts +17 -0
- package/dist/package/strings.d.ts.map +1 -0
- package/dist/package/strings.js +24 -0
- package/dist/package/strings.js.map +1 -0
- package/dist/reflowable/__tests__/vdt.d.ts +13 -0
- package/dist/reflowable/__tests__/vdt.d.ts.map +1 -0
- package/dist/reflowable/__tests__/vdt.js +55 -0
- package/dist/reflowable/__tests__/vdt.js.map +1 -0
- package/dist/reflowable/__tests__/xml.d.ts +8 -0
- package/dist/reflowable/__tests__/xml.d.ts.map +1 -0
- package/dist/reflowable/__tests__/xml.js +107 -0
- package/dist/reflowable/__tests__/xml.js.map +1 -0
- package/dist/reflowable/css.d.ts +45 -0
- package/dist/reflowable/css.d.ts.map +1 -0
- package/dist/reflowable/css.js +491 -0
- package/dist/reflowable/css.js.map +1 -0
- package/dist/reflowable/index.d.ts +4 -0
- package/dist/reflowable/index.d.ts.map +1 -0
- package/dist/reflowable/index.js +257 -0
- package/dist/reflowable/index.js.map +1 -0
- package/dist/reflowable/inline.d.ts +56 -0
- package/dist/reflowable/inline.d.ts.map +1 -0
- package/dist/reflowable/inline.js +334 -0
- package/dist/reflowable/inline.js.map +1 -0
- package/dist/reflowable/model.d.ts +261 -0
- package/dist/reflowable/model.d.ts.map +1 -0
- package/dist/reflowable/model.js +6 -0
- package/dist/reflowable/model.js.map +1 -0
- package/dist/reflowable/reflowable.test.d.ts +2 -0
- package/dist/reflowable/reflowable.test.d.ts.map +1 -0
- package/dist/reflowable/reflowable.test.js +469 -0
- package/dist/reflowable/reflowable.test.js.map +1 -0
- package/dist/reflowable/rtl.test.d.ts +2 -0
- package/dist/reflowable/rtl.test.d.ts.map +1 -0
- package/dist/reflowable/rtl.test.js +217 -0
- package/dist/reflowable/rtl.test.js.map +1 -0
- package/dist/reflowable/walk.d.ts +42 -0
- package/dist/reflowable/walk.d.ts.map +1 -0
- package/dist/reflowable/walk.js +1096 -0
- package/dist/reflowable/walk.js.map +1 -0
- package/dist/reflowable/xhtml.d.ts +33 -0
- package/dist/reflowable/xhtml.d.ts.map +1 -0
- package/dist/reflowable/xhtml.js +472 -0
- package/dist/reflowable/xhtml.js.map +1 -0
- package/dist/shared/accessibility.d.ts +20 -0
- package/dist/shared/accessibility.d.ts.map +1 -0
- package/dist/shared/accessibility.js +30 -0
- package/dist/shared/accessibility.js.map +1 -0
- package/dist/shared/assets.d.ts +46 -0
- package/dist/shared/assets.d.ts.map +1 -0
- package/dist/shared/assets.js +143 -0
- package/dist/shared/assets.js.map +1 -0
- package/dist/shared/assets.test.d.ts +2 -0
- package/dist/shared/assets.test.d.ts.map +1 -0
- package/dist/shared/assets.test.js +106 -0
- package/dist/shared/assets.test.js.map +1 -0
- package/dist/shared/media.d.ts +11 -0
- package/dist/shared/media.d.ts.map +1 -0
- package/dist/shared/media.js +52 -0
- package/dist/shared/media.js.map +1 -0
- package/dist/shared/uuid.d.ts +7 -0
- package/dist/shared/uuid.d.ts.map +1 -0
- package/dist/shared/uuid.js +63 -0
- package/dist/shared/uuid.js.map +1 -0
- package/dist/shared/xml.d.ts +54 -0
- package/dist/shared/xml.d.ts.map +1 -0
- package/dist/shared/xml.js +214 -0
- package/dist/shared/xml.js.map +1 -0
- package/dist/shared/xml.test.d.ts +2 -0
- package/dist/shared/xml.test.d.ts.map +1 -0
- package/dist/shared/xml.test.js +71 -0
- package/dist/shared/xml.test.js.map +1 -0
- package/dist/shared/xmlRead.d.ts +19 -0
- package/dist/shared/xmlRead.d.ts.map +1 -0
- package/dist/shared/xmlRead.js +85 -0
- package/dist/shared/xmlRead.js.map +1 -0
- package/dist/types.d.ts +205 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/worker/client.d.ts +39 -0
- package/dist/worker/client.d.ts.map +1 -0
- package/dist/worker/client.js +184 -0
- package/dist/worker/client.js.map +1 -0
- package/dist/worker/epub.worker.d.ts +2 -0
- package/dist/worker/epub.worker.d.ts.map +1 -0
- package/dist/worker/epub.worker.js +7 -0
- package/dist/worker/epub.worker.js.map +1 -0
- package/dist/worker/protocol.d.ts +44 -0
- package/dist/worker/protocol.d.ts.map +1 -0
- package/dist/worker/protocol.js +6 -0
- package/dist/worker/protocol.js.map +1 -0
- package/dist/worker/serve.d.ts +11 -0
- package/dist/worker/serve.d.ts.map +1 -0
- package/dist/worker/serve.js +53 -0
- package/dist/worker/serve.js.map +1 -0
- package/dist/worker/worker.test.d.ts +2 -0
- package/dist/worker/worker.test.d.ts.map +1 -0
- package/dist/worker/worker.test.js +168 -0
- package/dist/worker/worker.test.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
// Laid-out lines back to running text: the segments of each line become
|
|
2
|
+
// inline items (formatting and links kept, justification and tracking
|
|
3
|
+
// dropped) and the lines of a paragraph are joined again — with a space
|
|
4
|
+
// where the line broke at one, with nothing after a hyphen the break added
|
|
5
|
+
// (which goes) or one the text carries (which stays), and with nothing
|
|
6
|
+
// between Chinese, Japanese or Thai characters, which break without spaces.
|
|
7
|
+
import { escapeAttr, escapeXml, stripInvalidXmlChars } from '../shared/xml';
|
|
8
|
+
/** Characters set without spaces between words: a line may break right
|
|
9
|
+
* before or after one with nothing between them. */
|
|
10
|
+
const UNSPACED = /[⺀- -〿-ヿ-ㇿ㈀-鿿豈-︰-﹏--က-႟ក-\u{20000}-\u{3FFFF}]/u;
|
|
11
|
+
const HYPHENS = /[-‐]$/;
|
|
12
|
+
/** Size of a CSS font shorthand in px (16 when it has none). */
|
|
13
|
+
export function fontPx(fontString) {
|
|
14
|
+
const m = fontString ? /(\d+(?:\.\d+)?)px/.exec(fontString) : null;
|
|
15
|
+
return m ? Number(m[1]) : 16;
|
|
16
|
+
}
|
|
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 function idOf(prefix, raw) {
|
|
21
|
+
return prefix + raw.replace(/[^A-Za-z0-9_-]/gu, (c) => `_${c.codePointAt(0).toString(16)}`);
|
|
22
|
+
}
|
|
23
|
+
/** Text safe for an XML text node. */
|
|
24
|
+
export function xmlText(text) {
|
|
25
|
+
return escapeXml(stripInvalidXmlChars(text));
|
|
26
|
+
}
|
|
27
|
+
/** Text safe for an XML attribute value. */
|
|
28
|
+
export function xmlAttr(text) {
|
|
29
|
+
return escapeAttr(stripInvalidXmlChars(text));
|
|
30
|
+
}
|
|
31
|
+
/** The link a segment carries: a `:ref` to a resource or an anchor, a
|
|
32
|
+
* Markdown link (`#id` being an anchor of the book), a footnote marker,
|
|
33
|
+
* an index page number. */
|
|
34
|
+
function linkOf(seg, ctx) {
|
|
35
|
+
if (seg.refResourceId !== undefined) {
|
|
36
|
+
return seg.refAnchor ? { kind: 'anchor', id: seg.refResourceId } : { kind: 'resource', id: seg.refResourceId };
|
|
37
|
+
}
|
|
38
|
+
if (seg.href !== undefined) {
|
|
39
|
+
if (seg.href.startsWith('#') && seg.href.length > 1) {
|
|
40
|
+
let id = seg.href.slice(1);
|
|
41
|
+
try {
|
|
42
|
+
id = decodeURIComponent(id);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Keep it as written.
|
|
46
|
+
}
|
|
47
|
+
return { kind: 'anchor', id };
|
|
48
|
+
}
|
|
49
|
+
return { kind: 'url', href: seg.href };
|
|
50
|
+
}
|
|
51
|
+
if (seg.footnoteId !== undefined)
|
|
52
|
+
return { kind: 'note', doc: ctx.doc, id: seg.footnoteId, first: ctx.noteRef(seg.footnoteId) };
|
|
53
|
+
if (seg.pageLink !== undefined)
|
|
54
|
+
return { kind: 'page', bookIndex: seg.pageLink };
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
function formatOf(seg, full, lang) {
|
|
58
|
+
const fmt = {};
|
|
59
|
+
if (seg.bold)
|
|
60
|
+
fmt.bold = true;
|
|
61
|
+
if (seg.italic)
|
|
62
|
+
fmt.italic = true;
|
|
63
|
+
if (!full)
|
|
64
|
+
return fmt;
|
|
65
|
+
if (full.lang !== undefined && full.lang !== lang)
|
|
66
|
+
fmt.lang = full.lang;
|
|
67
|
+
if (full.script)
|
|
68
|
+
fmt.script = full.script;
|
|
69
|
+
if (full.fontString?.includes('small-caps'))
|
|
70
|
+
fmt.smallCaps = true;
|
|
71
|
+
if (full.captionLabel)
|
|
72
|
+
fmt.label = true;
|
|
73
|
+
if (full.cjkMarks?.dots)
|
|
74
|
+
fmt.dots = true;
|
|
75
|
+
if (full.cjkMarks?.properName !== undefined)
|
|
76
|
+
fmt.proper = true;
|
|
77
|
+
if (full.cjkMarks?.bookTitle !== undefined)
|
|
78
|
+
fmt.book = true;
|
|
79
|
+
if (full.tcy)
|
|
80
|
+
fmt.tcy = true;
|
|
81
|
+
if (full.orientation)
|
|
82
|
+
fmt.orientation = full.orientation;
|
|
83
|
+
if (full.warichu)
|
|
84
|
+
fmt.warichu = true;
|
|
85
|
+
return fmt;
|
|
86
|
+
}
|
|
87
|
+
/** A formula's SVG as XML a content document can embed: namespaces
|
|
88
|
+
* declared, MathJax's `data-*` attributes and HTML entities gone, sized
|
|
89
|
+
* in ems of the surrounding text so it scales with the reader's font. */
|
|
90
|
+
export function mathSvg(render, basePx, inline) {
|
|
91
|
+
const em = (px) => `${round(px / basePx)}em`;
|
|
92
|
+
const vb = render.viewBox;
|
|
93
|
+
let body = render.svg.replace(/^[\s\S]*?<svg\b[^>]*>/, '').replace(/<\/svg>\s*$/, '');
|
|
94
|
+
body = body
|
|
95
|
+
.replace(/\s+data-[\w-]+="[^"]*"/g, '')
|
|
96
|
+
.replace(/ /g, ' ')
|
|
97
|
+
.replace(/&(?!(?:amp|lt|gt|quot|apos|#\d+|#x[0-9a-fA-F]+);)/g, '&');
|
|
98
|
+
const xlink = /\bxlink:/.test(body) ? ' xmlns:xlink="http://www.w3.org/1999/xlink"' : '';
|
|
99
|
+
const align = inline ? ` style="vertical-align:${round(-render.depthPx / basePx)}em"` : '';
|
|
100
|
+
return `<svg xmlns="http://www.w3.org/2000/svg"${xlink} viewBox="${vb.minX} ${vb.minY} ${vb.width} ${vb.height}" width="${em(render.widthPx)}" height="${em(render.heightPx)}"${align} aria-hidden="true" focusable="false">${body}</svg>`;
|
|
101
|
+
}
|
|
102
|
+
export function round(n) {
|
|
103
|
+
return Math.round(n * 1000) / 1000;
|
|
104
|
+
}
|
|
105
|
+
/** The markup of a segment that is no plain text run, or undefined. */
|
|
106
|
+
function rawOf(seg, ctx) {
|
|
107
|
+
if (seg.kind === 'math' && seg.mathRender) {
|
|
108
|
+
const tex = seg.mathRender.tex;
|
|
109
|
+
return `<span class="pt-math" role="math" aria-label="${xmlAttr(tex)}">${mathSvg(seg.mathRender, ctx.basePx, true)}</span>`;
|
|
110
|
+
}
|
|
111
|
+
if (seg.kind === 'swatch') {
|
|
112
|
+
const color = seg.swatch?.color;
|
|
113
|
+
return color
|
|
114
|
+
? `<span class="pt-swatch" role="img" aria-label="${xmlAttr(color)}" style="background-color:${xmlAttr(color)}"></span>`
|
|
115
|
+
: '<span class="pt-swatch" role="img" aria-label="?"></span>';
|
|
116
|
+
}
|
|
117
|
+
if (seg.chip) {
|
|
118
|
+
const runs = seg.chip.runs.map((r) => wrapFormat(xmlText(r.text), formatOf(r))).join('');
|
|
119
|
+
return `<span class="pt-chip pt-chip-${idOf('', seg.chip.styleId)}">${runs}</span>`;
|
|
120
|
+
}
|
|
121
|
+
if (seg.ruby) {
|
|
122
|
+
const pos = seg.ruby.position === 'under' ? ' class="pt-ruby-under"' : seg.ruby.position === 'right' ? ' class="pt-ruby-right"' : '';
|
|
123
|
+
// No <rp> fallback brackets: EPUB 3.3 discourages them (EPUBCheck
|
|
124
|
+
// HTM_055), every EPUB 3 reading system lays ruby out.
|
|
125
|
+
return `<ruby${pos}>${wrapFormat(xmlText(seg.text), formatOf(seg, seg))}<rt>${xmlText(seg.ruby.text)}</rt></ruby>`;
|
|
126
|
+
}
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
/** `inner` inside the elements and classes of `fmt`. */
|
|
130
|
+
export function wrapFormat(inner, fmt) {
|
|
131
|
+
const classes = [
|
|
132
|
+
fmt.smallCaps && 'pt-sc',
|
|
133
|
+
fmt.label && 'pt-label',
|
|
134
|
+
fmt.dots && 'pt-dots',
|
|
135
|
+
fmt.proper && 'pt-proper',
|
|
136
|
+
fmt.book && 'pt-book',
|
|
137
|
+
fmt.tcy && 'pt-tcy',
|
|
138
|
+
fmt.orientation && `pt-${fmt.orientation}`,
|
|
139
|
+
fmt.warichu && 'pt-warichu',
|
|
140
|
+
fmt.done && 'pt-done',
|
|
141
|
+
].filter(Boolean);
|
|
142
|
+
let out = classes.length > 0 ? `<span class="${classes.join(' ')}">${inner}</span>` : inner;
|
|
143
|
+
if (fmt.script)
|
|
144
|
+
out = `<${fmt.script}>${out}</${fmt.script}>`;
|
|
145
|
+
if (fmt.italic)
|
|
146
|
+
out = `<em>${out}</em>`;
|
|
147
|
+
if (fmt.bold)
|
|
148
|
+
out = `<strong>${out}</strong>`;
|
|
149
|
+
if (fmt.lang)
|
|
150
|
+
out = `<span lang="${xmlAttr(fmt.lang)}" xml:lang="${xmlAttr(fmt.lang)}">${out}</span>`;
|
|
151
|
+
return out;
|
|
152
|
+
}
|
|
153
|
+
/** `text` (which starts at `start` in its segment's text) without the
|
|
154
|
+
* characters at `offsets` (into the segment's text, ascending). */
|
|
155
|
+
function dropOffsets(text, offsets, start) {
|
|
156
|
+
let out = '';
|
|
157
|
+
let last = 0;
|
|
158
|
+
for (const offset of offsets) {
|
|
159
|
+
const i = offset - start;
|
|
160
|
+
if (i < last || i >= text.length)
|
|
161
|
+
continue;
|
|
162
|
+
out += text.slice(last, i);
|
|
163
|
+
last = i + 1;
|
|
164
|
+
}
|
|
165
|
+
return out + text.slice(last);
|
|
166
|
+
}
|
|
167
|
+
/** The text items of one line, in logical order. */
|
|
168
|
+
export function lineItems(line, ctx, segments = line.segments) {
|
|
169
|
+
const out = [];
|
|
170
|
+
const segs = segments ?? (line.text ? [{ kind: 'text', text: line.text, width: 0 }] : []);
|
|
171
|
+
// A line the engine read for directions (#369) gives each segment its
|
|
172
|
+
// embedding level: odd when `rtl`, `level` when past 1, else 0. Lines
|
|
173
|
+
// with no right-to-left run carry none, and their items none either.
|
|
174
|
+
const bidi = (line.segments ?? segs).some((s) => s.rtl || s.level !== undefined);
|
|
175
|
+
const lvlOf = (seg) => (bidi ? { lvl: seg.level ?? (seg.rtl ? 1 : 0) } : {});
|
|
176
|
+
// The tatweels kashida justification inserted (#375) are print
|
|
177
|
+
// justification: a reading system justifies the text itself. A tatweel
|
|
178
|
+
// the author typed is not among a segment's `kashida` offsets and stays.
|
|
179
|
+
// A line counted as stretched with no offsets on its segments comes from
|
|
180
|
+
// a layout older than the offsets: every tatweel on it goes. (The whole
|
|
181
|
+
// line decides: `segments` may be a part of it, a poem's hemistich.)
|
|
182
|
+
const offsets = (line.segments ?? segs).some((s) => s.kashida !== undefined && s.kashida.length > 0);
|
|
183
|
+
let first = true;
|
|
184
|
+
for (const seg of segs) {
|
|
185
|
+
const link = linkOf(seg, ctx);
|
|
186
|
+
const raw = rawOf(seg, ctx);
|
|
187
|
+
if (raw !== undefined) {
|
|
188
|
+
out.push({ t: 'raw', xhtml: raw, ...(link ? { link } : {}), ...lvlOf(seg) });
|
|
189
|
+
first = false;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (seg.kind === 'space') {
|
|
193
|
+
const text = seg.labelTab ? ' ' : seg.text.length > 0 ? seg.text : seg.autospace ? '' : ' ';
|
|
194
|
+
if (text)
|
|
195
|
+
out.push({ t: 'text', text, fmt: {}, ...(link ? { link } : {}), ...lvlOf(seg) });
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (seg.kind !== 'text')
|
|
199
|
+
continue;
|
|
200
|
+
const runs = seg.runs && seg.runs.length > 0 ? seg.runs : [{ text: seg.text, bold: seg.bold, italic: seg.italic }];
|
|
201
|
+
// Where each run starts in the segment's text (kashida offsets).
|
|
202
|
+
let at = 0;
|
|
203
|
+
for (const run of runs) {
|
|
204
|
+
let text = run.text;
|
|
205
|
+
const start = at;
|
|
206
|
+
at += run.text.length;
|
|
207
|
+
if (offsets) {
|
|
208
|
+
if (seg.kashida)
|
|
209
|
+
text = dropOffsets(text, seg.kashida, start);
|
|
210
|
+
}
|
|
211
|
+
else if (line.kashida) {
|
|
212
|
+
text = text.replace(/ـ/g, '');
|
|
213
|
+
}
|
|
214
|
+
// The repeated hyphen of a compound broken at its hyphen
|
|
215
|
+
// ("vencer-" | "-se") is not in the text.
|
|
216
|
+
if (first && line.repeatedHyphen)
|
|
217
|
+
text = text.replace(/^-/, '');
|
|
218
|
+
first = false;
|
|
219
|
+
if (!text)
|
|
220
|
+
continue;
|
|
221
|
+
out.push({ t: 'text', text, fmt: formatOf(run, seg, ctx.lang), ...(link ? { link } : {}), ...lvlOf(seg) });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return out;
|
|
225
|
+
}
|
|
226
|
+
function lastText(inl) {
|
|
227
|
+
for (let i = inl.length - 1; i >= 0; i--) {
|
|
228
|
+
const item = inl[i];
|
|
229
|
+
if (item.t === 'text')
|
|
230
|
+
return item;
|
|
231
|
+
if (item.t === 'raw')
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
function firstChar(items) {
|
|
237
|
+
for (const item of items) {
|
|
238
|
+
if (item.t === 'text' && item.text.length > 0)
|
|
239
|
+
return [...item.text][0];
|
|
240
|
+
if (item.t === 'raw')
|
|
241
|
+
return 'x';
|
|
242
|
+
}
|
|
243
|
+
return '';
|
|
244
|
+
}
|
|
245
|
+
/** Append a line to `sink`, joined to the line before it (or after a line
|
|
246
|
+
* break, `hardBreak`: a line the author ended). `before` (page starts,
|
|
247
|
+
* anchors) goes right before the line's text. */
|
|
248
|
+
export function appendLine(sink, line, ctx, before = [], segments, hardBreak = false) {
|
|
249
|
+
const items = lineItems(line, ctx, segments);
|
|
250
|
+
const prev = sink.prev;
|
|
251
|
+
if (hardBreak && sink.inl.length > 0) {
|
|
252
|
+
sink.inl.push({ t: 'raw', xhtml: '<br/>' });
|
|
253
|
+
}
|
|
254
|
+
else if (prev && sink.inl.length > 0) {
|
|
255
|
+
const last = lastText(sink.inl);
|
|
256
|
+
const tail = last ? [...last.text].pop() ?? '' : '';
|
|
257
|
+
if (prev.hyphenated) {
|
|
258
|
+
// The break added the hyphen the line ends on, unless the text has
|
|
259
|
+
// it (a compound) or the line ends at a dash or inside a URL.
|
|
260
|
+
if (!prev.hardHyphen && last && HYPHENS.test(last.text)) {
|
|
261
|
+
last.text = last.text.slice(0, -1);
|
|
262
|
+
// Catalan: `il-` | `lusió` was `il·lusió` (the hyphen took the
|
|
263
|
+
// middle dot's place).
|
|
264
|
+
if (/^ca\b/i.test(ctx.lang) && /[lL]$/.test(last.text) && /^[lL]/.test(firstChar(items)))
|
|
265
|
+
last.text += '·';
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else if (tail && !/\s/.test(tail) && !HYPHENS.test(tail)) {
|
|
269
|
+
const next = firstChar(items);
|
|
270
|
+
if (next && !/\s/.test(next) && !UNSPACED.test(tail) && !UNSPACED.test(next)) {
|
|
271
|
+
sink.inl.push({ t: 'text', text: ' ', fmt: {} });
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
sink.inl.push(...before, ...items);
|
|
276
|
+
sink.prev = line;
|
|
277
|
+
}
|
|
278
|
+
/** Append every line of a block. */
|
|
279
|
+
/** Append every line of a block (or of a fragment of one). A line marked
|
|
280
|
+
* the paragraph's last with more lines after it in the same fragment
|
|
281
|
+
* ended at a line break the author typed. */
|
|
282
|
+
export function appendLines(sink, lines, ctx, beforeLine) {
|
|
283
|
+
lines.forEach((line, i) => appendLine(sink, line, ctx, beforeLine?.(line, i) ?? [], undefined, i > 0 && lines[i - 1].isLastLine === true));
|
|
284
|
+
}
|
|
285
|
+
/** The plain text of inline items (labels, titles, alt text). */
|
|
286
|
+
export function plainText(inl) {
|
|
287
|
+
return inl.map((i) => (i.t === 'text' ? i.text : '')).join('').replace(/\s+/g, ' ').trim();
|
|
288
|
+
}
|
|
289
|
+
/** A space with no link of its own between two runs that share one takes
|
|
290
|
+
* it, so linked words separated by spaces stay one link. */
|
|
291
|
+
export function bridgeLinks(inl) {
|
|
292
|
+
for (let i = 1; i < inl.length - 1; i++) {
|
|
293
|
+
const item = inl[i];
|
|
294
|
+
if (item.t !== 'text' || item.link || /\S/.test(item.text))
|
|
295
|
+
continue;
|
|
296
|
+
const a = inl[i - 1];
|
|
297
|
+
const b = inl[i + 1];
|
|
298
|
+
if ((a.t === 'text' || a.t === 'raw') && (b.t === 'text' || b.t === 'raw') && a.link && b.link && linkKey(a.link) === linkKey(b.link)) {
|
|
299
|
+
inl[i] = { ...item, link: a.link };
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Likewise a plain space between two runs in one format (two bold words)
|
|
303
|
+
// takes their format, so they make one element.
|
|
304
|
+
for (let i = 1; i < inl.length - 1; i++) {
|
|
305
|
+
const item = inl[i];
|
|
306
|
+
if (item.t !== 'text' || /\S/.test(item.text) || formatKey(item.fmt) !== formatKey({}))
|
|
307
|
+
continue;
|
|
308
|
+
const a = inl[i - 1];
|
|
309
|
+
const b = inl[i + 1];
|
|
310
|
+
if (a.t === 'text' && b.t === 'text' && linkKey(a.link) === linkKey(b.link) && linkKey(item.link) === linkKey(a.link) && formatKey(a.fmt) === formatKey(b.fmt)) {
|
|
311
|
+
inl[i] = { ...item, fmt: a.fmt };
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return inl;
|
|
315
|
+
}
|
|
316
|
+
export function linkKey(link) {
|
|
317
|
+
if (!link)
|
|
318
|
+
return '';
|
|
319
|
+
switch (link.kind) {
|
|
320
|
+
case 'url': return `u:${link.href}`;
|
|
321
|
+
case 'anchor': return `a:${link.id}`;
|
|
322
|
+
case 'resource': return `r:${link.id}`;
|
|
323
|
+
case 'note': return `n:${link.doc}:${link.id}:${link.first ? 1 : 0}`;
|
|
324
|
+
case 'page': return `p:${link.bookIndex}`;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
export function formatKey(fmt) {
|
|
328
|
+
return [
|
|
329
|
+
fmt.bold ? 'b' : '', fmt.italic ? 'i' : '', fmt.script ?? '', fmt.smallCaps ? 'c' : '', fmt.label ? 'l' : '',
|
|
330
|
+
fmt.dots ? 'd' : '', fmt.proper ? 'p' : '', fmt.book ? 'k' : '', fmt.tcy ? 't' : '', fmt.orientation ?? '',
|
|
331
|
+
fmt.warichu ? 'w' : '', fmt.done ? 'x' : '', fmt.lang ?? '',
|
|
332
|
+
].join('|');
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=inline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline.js","sourceRoot":"","sources":["../../src/reflowable/inline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/** Where a link goes, resolved to `file#id` by the registry. */
|
|
2
|
+
export type LinkTarget =
|
|
3
|
+
/** A URL as written (`https:`, `mailto:`…, or a relative one). */
|
|
4
|
+
{
|
|
5
|
+
kind: 'url';
|
|
6
|
+
href: string;
|
|
7
|
+
}
|
|
8
|
+
/** An anchor of the book: a heading's `{#id}`, an inline anchor, a
|
|
9
|
+
* container, a bibliography entry (`ref-<key>`). */
|
|
10
|
+
| {
|
|
11
|
+
kind: 'anchor';
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
/** A numbered resource (figure, table). */
|
|
15
|
+
| {
|
|
16
|
+
kind: 'resource';
|
|
17
|
+
id: string;
|
|
18
|
+
}
|
|
19
|
+
/** A footnote of the chapter document `doc`. */
|
|
20
|
+
| {
|
|
21
|
+
kind: 'note';
|
|
22
|
+
doc: number;
|
|
23
|
+
id: string;
|
|
24
|
+
first: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** A printed page (book page index), as an index page number links. */
|
|
27
|
+
| {
|
|
28
|
+
kind: 'page';
|
|
29
|
+
bookIndex: number;
|
|
30
|
+
};
|
|
31
|
+
/** Inline formatting of a text run. Every flag maps to one element or
|
|
32
|
+
* class (see xhtml.ts). */
|
|
33
|
+
export interface Format {
|
|
34
|
+
bold?: boolean;
|
|
35
|
+
italic?: boolean;
|
|
36
|
+
script?: 'sup' | 'sub';
|
|
37
|
+
smallCaps?: boolean;
|
|
38
|
+
/** Part of a caption's numbered label. */
|
|
39
|
+
label?: boolean;
|
|
40
|
+
/** Chinese emphasis dots / proper-name line / book-title line. */
|
|
41
|
+
dots?: boolean;
|
|
42
|
+
proper?: boolean;
|
|
43
|
+
book?: boolean;
|
|
44
|
+
/** Vertical text: tate-chu-yoko, author's orientation. */
|
|
45
|
+
tcy?: boolean;
|
|
46
|
+
orientation?: 'upright' | 'sideways';
|
|
47
|
+
/** A warichu note (two small rows in print, one small run here). */
|
|
48
|
+
warichu?: boolean;
|
|
49
|
+
/** A completed task's text. */
|
|
50
|
+
done?: boolean;
|
|
51
|
+
/** The language of the run when it differs from its document's: the
|
|
52
|
+
* one the author named on an inline isolate (`:ltr[…]{lang=en}`,
|
|
53
|
+
* `VDTLineSegment.lang`). */
|
|
54
|
+
lang?: string;
|
|
55
|
+
}
|
|
56
|
+
/** `lvl` on a text or raw item: the UAX #9 embedding level the engine
|
|
57
|
+
* resolved for the segment it comes from (#367/#369: odd for
|
|
58
|
+
* `VDTLineSegment.rtl`, `level` past 1), on lines that carry levels. The
|
|
59
|
+
* serializer nests the runs that rise above their paragraph's level in
|
|
60
|
+
* `dir` isolates (xhtml.ts `bidiLevels`), so a reading system orders them
|
|
61
|
+
* as the print did; items without one take their level from their
|
|
62
|
+
* letters or their neighbours. */
|
|
63
|
+
export type InlineItem = {
|
|
64
|
+
t: 'text';
|
|
65
|
+
text: string;
|
|
66
|
+
fmt: Format;
|
|
67
|
+
link?: LinkTarget;
|
|
68
|
+
lvl?: number;
|
|
69
|
+
}
|
|
70
|
+
/** Markup written as is (maths, ruby, chips, swatches). */
|
|
71
|
+
| {
|
|
72
|
+
t: 'raw';
|
|
73
|
+
xhtml: string;
|
|
74
|
+
link?: LinkTarget;
|
|
75
|
+
lvl?: number;
|
|
76
|
+
}
|
|
77
|
+
/** The start of a printed page (`epub:type="pagebreak"`). */
|
|
78
|
+
| {
|
|
79
|
+
t: 'page';
|
|
80
|
+
bookIndex: number;
|
|
81
|
+
}
|
|
82
|
+
/** An anchor set in the text (an empty element carrying its id). */
|
|
83
|
+
| {
|
|
84
|
+
t: 'anchor';
|
|
85
|
+
id: string;
|
|
86
|
+
};
|
|
87
|
+
export interface ParagraphNode {
|
|
88
|
+
k: 'p';
|
|
89
|
+
inl: InlineItem[];
|
|
90
|
+
cls?: string[];
|
|
91
|
+
id?: string;
|
|
92
|
+
dir?: 'ltr' | 'rtl';
|
|
93
|
+
}
|
|
94
|
+
export interface HeadingNode {
|
|
95
|
+
k: 'h';
|
|
96
|
+
level: number;
|
|
97
|
+
id: string;
|
|
98
|
+
inl: InlineItem[];
|
|
99
|
+
cls?: string[];
|
|
100
|
+
dir?: 'ltr' | 'rtl';
|
|
101
|
+
}
|
|
102
|
+
export interface ListItemNode {
|
|
103
|
+
marker?: string;
|
|
104
|
+
inl: InlineItem[];
|
|
105
|
+
/** Nested lists. */
|
|
106
|
+
children: Node[];
|
|
107
|
+
done?: boolean;
|
|
108
|
+
dir?: 'ltr' | 'rtl';
|
|
109
|
+
}
|
|
110
|
+
export interface ListNode {
|
|
111
|
+
k: 'list';
|
|
112
|
+
ordered: boolean;
|
|
113
|
+
task: boolean;
|
|
114
|
+
items: ListItemNode[];
|
|
115
|
+
}
|
|
116
|
+
export interface QuoteNode {
|
|
117
|
+
k: 'quote';
|
|
118
|
+
children: ParagraphNode[];
|
|
119
|
+
}
|
|
120
|
+
export interface CalloutNode {
|
|
121
|
+
k: 'callout';
|
|
122
|
+
styleId?: string;
|
|
123
|
+
title?: string;
|
|
124
|
+
children: Node[];
|
|
125
|
+
/** A pull quote: `'echo'` when its words are read in the chapter's
|
|
126
|
+
* text as well (the box is then hidden from assistive technology, so
|
|
127
|
+
* the words are read once), `'own'` when only its style names it one
|
|
128
|
+
* (walk.ts `markPullQuotes`). */
|
|
129
|
+
pullQuote?: 'echo' | 'own';
|
|
130
|
+
}
|
|
131
|
+
export interface FigureNode {
|
|
132
|
+
k: 'figure';
|
|
133
|
+
id: string;
|
|
134
|
+
/** Pages starting where the figure is read. */
|
|
135
|
+
pre: InlineItem[];
|
|
136
|
+
fileId?: string;
|
|
137
|
+
alt: string;
|
|
138
|
+
caption: InlineItem[];
|
|
139
|
+
captionAbove: boolean;
|
|
140
|
+
note: InlineItem[];
|
|
141
|
+
}
|
|
142
|
+
export interface TableCellNode {
|
|
143
|
+
row: number;
|
|
144
|
+
col: number;
|
|
145
|
+
colSpan: number;
|
|
146
|
+
rowSpan: number;
|
|
147
|
+
header: boolean;
|
|
148
|
+
align: string;
|
|
149
|
+
verticalAlign: string;
|
|
150
|
+
inl: InlineItem[];
|
|
151
|
+
image?: {
|
|
152
|
+
fileId: string;
|
|
153
|
+
alt: string;
|
|
154
|
+
width?: number;
|
|
155
|
+
};
|
|
156
|
+
background?: string;
|
|
157
|
+
alternate?: boolean;
|
|
158
|
+
}
|
|
159
|
+
export interface TableNode {
|
|
160
|
+
k: 'table';
|
|
161
|
+
id: string;
|
|
162
|
+
pre: InlineItem[];
|
|
163
|
+
caption: InlineItem[];
|
|
164
|
+
captionAbove: boolean;
|
|
165
|
+
note: InlineItem[];
|
|
166
|
+
headerRows: number;
|
|
167
|
+
columnWidths?: number[];
|
|
168
|
+
cells: Map<string, TableCellNode>;
|
|
169
|
+
}
|
|
170
|
+
/** One bayt of a `:::verse` poem (#378): its ṣadr and ʿajuz, or a lone
|
|
171
|
+
* hemistich (`single`, set centred on the poem). */
|
|
172
|
+
export interface BaytNode {
|
|
173
|
+
sadr: InlineItem[];
|
|
174
|
+
ajuz: InlineItem[];
|
|
175
|
+
single?: boolean;
|
|
176
|
+
/** The ornament printed in the gap (`ornament="٭"`), not text. */
|
|
177
|
+
ornament?: string;
|
|
178
|
+
}
|
|
179
|
+
/** A `:::verse` poem: bayts in two hemistichs. */
|
|
180
|
+
export interface VerseNode {
|
|
181
|
+
k: 'verse';
|
|
182
|
+
/** Page starts and anchors that come before its first bayt. */
|
|
183
|
+
pre: InlineItem[];
|
|
184
|
+
bayts: BaytNode[];
|
|
185
|
+
/** The paragraph style its fence names (`ps-<id>`). */
|
|
186
|
+
cls?: string[];
|
|
187
|
+
dir?: 'ltr' | 'rtl';
|
|
188
|
+
}
|
|
189
|
+
export interface MathNode {
|
|
190
|
+
k: 'math';
|
|
191
|
+
pre: InlineItem[];
|
|
192
|
+
tex: string;
|
|
193
|
+
svg: string;
|
|
194
|
+
}
|
|
195
|
+
/** A contents row of a `:::toc`. */
|
|
196
|
+
export interface TocRowNode {
|
|
197
|
+
number?: string;
|
|
198
|
+
inl: InlineItem[];
|
|
199
|
+
subtitle: InlineItem[];
|
|
200
|
+
/** Book page index the row points at. */
|
|
201
|
+
page?: number;
|
|
202
|
+
part?: boolean;
|
|
203
|
+
/** The row's plain title, to find the heading it lists. */
|
|
204
|
+
title: string;
|
|
205
|
+
}
|
|
206
|
+
export interface TocNode {
|
|
207
|
+
k: 'toc';
|
|
208
|
+
pre: InlineItem[];
|
|
209
|
+
rows: TocRowNode[];
|
|
210
|
+
}
|
|
211
|
+
/** Page starts and anchors with no text of their own to sit in (a blank
|
|
212
|
+
* page, the last page of a chapter). */
|
|
213
|
+
export interface MarkerNode {
|
|
214
|
+
k: 'marker';
|
|
215
|
+
inl: InlineItem[];
|
|
216
|
+
}
|
|
217
|
+
export type Node = ParagraphNode | HeadingNode | ListNode | QuoteNode | CalloutNode | FigureNode | TableNode | MathNode | VerseNode | TocNode | MarkerNode;
|
|
218
|
+
/** A footnote: its paragraph and the file of its first marker. */
|
|
219
|
+
export interface NoteModel {
|
|
220
|
+
doc: number;
|
|
221
|
+
id: string;
|
|
222
|
+
inl: InlineItem[];
|
|
223
|
+
/** The note's direction when it differs from the document's. */
|
|
224
|
+
dir?: 'ltr' | 'rtl';
|
|
225
|
+
}
|
|
226
|
+
/** One XHTML content document of the spine. */
|
|
227
|
+
export interface FileModel {
|
|
228
|
+
/** Href relative to the package document (`text/chapter-001.xhtml`). */
|
|
229
|
+
href: string;
|
|
230
|
+
/** Manifest id. */
|
|
231
|
+
itemId: string;
|
|
232
|
+
kind: 'chapter' | 'part';
|
|
233
|
+
/** Index of the chapter document it comes from. */
|
|
234
|
+
doc: number;
|
|
235
|
+
nodes: Node[];
|
|
236
|
+
notes: NoteModel[];
|
|
237
|
+
lang: string;
|
|
238
|
+
dir?: 'rtl';
|
|
239
|
+
/** The `<title>`: the first heading's text, else the book's. */
|
|
240
|
+
title?: string;
|
|
241
|
+
/** The palette overrides of the part in force where the document starts
|
|
242
|
+
* (`:::part{palette=…}`: palette id → hex). */
|
|
243
|
+
palette?: Record<string, string>;
|
|
244
|
+
/** Stylesheets linked after the book's (hrefs relative to the package
|
|
245
|
+
* document): what the chapter's configuration and its part's palette
|
|
246
|
+
* change in it. */
|
|
247
|
+
stylesheets?: string[];
|
|
248
|
+
}
|
|
249
|
+
/** A heading as the navigation and the contents rows see it. */
|
|
250
|
+
export interface HeadingEntry {
|
|
251
|
+
file: FileModel;
|
|
252
|
+
id: string;
|
|
253
|
+
/** Level as written (1–6); 0 for a part opener. */
|
|
254
|
+
level: number;
|
|
255
|
+
label: string;
|
|
256
|
+
/** Book page index the heading was printed on. */
|
|
257
|
+
page: number;
|
|
258
|
+
/** Listed in the navigation (a heading style may opt out). */
|
|
259
|
+
listed: boolean;
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/reflowable/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// The semantic model of a reflowable book: what the walk over the laid-out
|
|
2
|
+
// pages (walk.ts) rebuilds and the serializer (xhtml.ts) writes. Text is
|
|
3
|
+
// kept as inline items, links as targets resolved once every chapter has
|
|
4
|
+
// been walked (a cross-reference may point at a later chapter).
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/reflowable/model.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,gEAAgE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflowable.test.d.ts","sourceRoot":"","sources":["../../src/reflowable/reflowable.test.ts"],"names":[],"mappings":""}
|