wolfy-reader 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 +277 -0
- package/dist/core/book.d.ts +75 -0
- package/dist/core/book.d.ts.map +1 -0
- package/dist/core/book.js +2 -0
- package/dist/core/book.js.map +1 -0
- package/dist/core/errors.d.ts +17 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +29 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/format.d.ts +13 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +2 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/graphemes.d.ts +36 -0
- package/dist/core/graphemes.d.ts.map +1 -0
- package/dist/core/graphemes.js +62 -0
- package/dist/core/graphemes.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lookup.d.ts +10 -0
- package/dist/core/lookup.d.ts.map +1 -0
- package/dist/core/lookup.js +16 -0
- package/dist/core/lookup.js.map +1 -0
- package/dist/core/open.d.ts +12 -0
- package/dist/core/open.d.ts.map +1 -0
- package/dist/core/open.js +23 -0
- package/dist/core/open.js.map +1 -0
- package/dist/core/position.d.ts +121 -0
- package/dist/core/position.d.ts.map +1 -0
- package/dist/core/position.js +327 -0
- package/dist/core/position.js.map +1 -0
- package/dist/core/reading-text.d.ts +77 -0
- package/dist/core/reading-text.d.ts.map +1 -0
- package/dist/core/reading-text.js +144 -0
- package/dist/core/reading-text.js.map +1 -0
- package/dist/core/source.d.ts +17 -0
- package/dist/core/source.d.ts.map +1 -0
- package/dist/core/source.js +39 -0
- package/dist/core/source.js.map +1 -0
- package/dist/core/storage.d.ts +7 -0
- package/dist/core/storage.d.ts.map +1 -0
- package/dist/core/storage.js +2 -0
- package/dist/core/storage.js.map +1 -0
- package/dist/core/text.d.ts +18 -0
- package/dist/core/text.d.ts.map +1 -0
- package/dist/core/text.js +32 -0
- package/dist/core/text.js.map +1 -0
- package/dist/formats/epub/href.d.ts +14 -0
- package/dist/formats/epub/href.d.ts.map +1 -0
- package/dist/formats/epub/href.js +52 -0
- package/dist/formats/epub/href.js.map +1 -0
- package/dist/formats/epub/index.d.ts +3 -0
- package/dist/formats/epub/index.d.ts.map +1 -0
- package/dist/formats/epub/index.js +223 -0
- package/dist/formats/epub/index.js.map +1 -0
- package/dist/formats/epub/opf.d.ts +27 -0
- package/dist/formats/epub/opf.d.ts.map +1 -0
- package/dist/formats/epub/opf.js +110 -0
- package/dist/formats/epub/opf.js.map +1 -0
- package/dist/formats/epub/toc.d.ts +6 -0
- package/dist/formats/epub/toc.d.ts.map +1 -0
- package/dist/formats/epub/toc.js +88 -0
- package/dist/formats/epub/toc.js.map +1 -0
- package/dist/formats/fb2/index.d.ts +13 -0
- package/dist/formats/fb2/index.d.ts.map +1 -0
- package/dist/formats/fb2/index.js +317 -0
- package/dist/formats/fb2/index.js.map +1 -0
- package/dist/formats/index.d.ts +4 -0
- package/dist/formats/index.d.ts.map +1 -0
- package/dist/formats/index.js +4 -0
- package/dist/formats/index.js.map +1 -0
- package/dist/formats/text/index.d.ts +11 -0
- package/dist/formats/text/index.d.ts.map +1 -0
- package/dist/formats/text/index.js +201 -0
- package/dist/formats/text/index.js.map +1 -0
- package/dist/formats/xml.d.ts +33 -0
- package/dist/formats/xml.d.ts.map +1 -0
- package/dist/formats/xml.js +321 -0
- package/dist/formats/xml.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/chunk.d.ts +51 -0
- package/dist/layout/chunk.d.ts.map +1 -0
- package/dist/layout/chunk.js +131 -0
- package/dist/layout/chunk.js.map +1 -0
- package/dist/layout/index.d.ts +238 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +476 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/reader/index.d.ts +231 -0
- package/dist/reader/index.d.ts.map +1 -0
- package/dist/reader/index.js +958 -0
- package/dist/reader/index.js.map +1 -0
- package/dist/reader/input.d.ts +69 -0
- package/dist/reader/input.d.ts.map +1 -0
- package/dist/reader/input.js +75 -0
- package/dist/reader/input.js.map +1 -0
- package/dist/search/extract.d.ts +51 -0
- package/dist/search/extract.d.ts.map +1 -0
- package/dist/search/extract.js +401 -0
- package/dist/search/extract.js.map +1 -0
- package/dist/search/index.d.ts +11 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +11 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/matcher.d.ts +56 -0
- package/dist/search/matcher.d.ts.map +1 -0
- package/dist/search/matcher.js +128 -0
- package/dist/search/matcher.js.map +1 -0
- package/dist/search/normalize.d.ts +48 -0
- package/dist/search/normalize.d.ts.map +1 -0
- package/dist/search/normalize.js +103 -0
- package/dist/search/normalize.js.map +1 -0
- package/dist/view/allowlist.d.ts +59 -0
- package/dist/view/allowlist.d.ts.map +1 -0
- package/dist/view/allowlist.js +198 -0
- package/dist/view/allowlist.js.map +1 -0
- package/dist/view/appearance.d.ts +137 -0
- package/dist/view/appearance.d.ts.map +1 -0
- package/dist/view/appearance.js +274 -0
- package/dist/view/appearance.js.map +1 -0
- package/dist/view/css.d.ts +24 -0
- package/dist/view/css.d.ts.map +1 -0
- package/dist/view/css.js +153 -0
- package/dist/view/css.js.map +1 -0
- package/dist/view/frame.d.ts +54 -0
- package/dist/view/frame.d.ts.map +1 -0
- package/dist/view/frame.js +980 -0
- package/dist/view/frame.js.map +1 -0
- package/dist/view/host.d.ts +160 -0
- package/dist/view/host.d.ts.map +1 -0
- package/dist/view/host.js +385 -0
- package/dist/view/host.js.map +1 -0
- package/dist/view/index.d.ts +12 -0
- package/dist/view/index.d.ts.map +1 -0
- package/dist/view/index.js +7 -0
- package/dist/view/index.js.map +1 -0
- package/dist/view/protocol.d.ts +220 -0
- package/dist/view/protocol.d.ts.map +1 -0
- package/dist/view/protocol.js +246 -0
- package/dist/view/protocol.js.map +1 -0
- package/dist/view/reference.d.ts +18 -0
- package/dist/view/reference.d.ts.map +1 -0
- package/dist/view/reference.js +25 -0
- package/dist/view/reference.js.map +1 -0
- package/dist/view/resources.d.ts +51 -0
- package/dist/view/resources.d.ts.map +1 -0
- package/dist/view/resources.js +242 -0
- package/dist/view/resources.js.map +1 -0
- package/dist/view/sanitize.d.ts +32 -0
- package/dist/view/sanitize.d.ts.map +1 -0
- package/dist/view/sanitize.js +226 -0
- package/dist/view/sanitize.js.map +1 -0
- package/dist/zip/central.d.ts +12 -0
- package/dist/zip/central.d.ts.map +1 -0
- package/dist/zip/central.js +72 -0
- package/dist/zip/central.js.map +1 -0
- package/dist/zip/crc32.d.ts +3 -0
- package/dist/zip/crc32.d.ts.map +1 -0
- package/dist/zip/crc32.js +28 -0
- package/dist/zip/crc32.js.map +1 -0
- package/dist/zip/eocd.d.ts +9 -0
- package/dist/zip/eocd.d.ts.map +1 -0
- package/dist/zip/eocd.js +84 -0
- package/dist/zip/eocd.js.map +1 -0
- package/dist/zip/errors.d.ts +19 -0
- package/dist/zip/errors.d.ts.map +1 -0
- package/dist/zip/errors.js +37 -0
- package/dist/zip/errors.js.map +1 -0
- package/dist/zip/index.d.ts +18 -0
- package/dist/zip/index.d.ts.map +1 -0
- package/dist/zip/index.js +78 -0
- package/dist/zip/index.js.map +1 -0
- package/dist/zip/inflate.d.ts +2 -0
- package/dist/zip/inflate.d.ts.map +1 -0
- package/dist/zip/inflate.js +43 -0
- package/dist/zip/inflate.js.map +1 -0
- package/dist/zip/source.d.ts +15 -0
- package/dist/zip/source.d.ts.map +1 -0
- package/dist/zip/source.js +34 -0
- package/dist/zip/source.js.map +1 -0
- package/package.json +75 -0
- package/src/core/book.ts +80 -0
- package/src/core/errors.ts +31 -0
- package/src/core/format.ts +14 -0
- package/src/core/graphemes.ts +73 -0
- package/src/core/index.ts +27 -0
- package/src/core/lookup.ts +16 -0
- package/src/core/open.ts +31 -0
- package/src/core/position.ts +485 -0
- package/src/core/reading-text.ts +200 -0
- package/src/core/source.ts +61 -0
- package/src/core/storage.ts +6 -0
- package/src/core/text.ts +35 -0
- package/src/formats/epub/href.ts +54 -0
- package/src/formats/epub/index.ts +235 -0
- package/src/formats/epub/opf.ts +143 -0
- package/src/formats/epub/toc.ts +120 -0
- package/src/formats/fb2/index.ts +348 -0
- package/src/formats/index.ts +3 -0
- package/src/formats/text/index.ts +208 -0
- package/src/formats/xml.ts +326 -0
- package/src/index.ts +26 -0
- package/src/layout/chunk.ts +169 -0
- package/src/layout/index.ts +573 -0
- package/src/reader/index.ts +1206 -0
- package/src/reader/input.ts +122 -0
- package/src/search/extract.ts +403 -0
- package/src/search/index.ts +10 -0
- package/src/search/matcher.ts +187 -0
- package/src/search/normalize.ts +122 -0
- package/src/view/allowlist.ts +273 -0
- package/src/view/appearance.ts +380 -0
- package/src/view/css.ts +172 -0
- package/src/view/frame.ts +1018 -0
- package/src/view/host.ts +527 -0
- package/src/view/index.ts +24 -0
- package/src/view/protocol.ts +412 -0
- package/src/view/reference.ts +30 -0
- package/src/view/resources.ts +265 -0
- package/src/view/sanitize.ts +266 -0
- package/src/zip/central.ts +85 -0
- package/src/zip/crc32.ts +30 -0
- package/src/zip/eocd.ts +97 -0
- package/src/zip/errors.ts +41 -0
- package/src/zip/index.ts +114 -0
- package/src/zip/inflate.ts +41 -0
- package/src/zip/source.ts +51 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface ManifestItem {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly href: string;
|
|
4
|
+
readonly mediaType: string;
|
|
5
|
+
readonly properties: readonly string[];
|
|
6
|
+
/** Manifest id of the item to use when this one's media type is unsupported. */
|
|
7
|
+
readonly fallback?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface OpfPackage {
|
|
10
|
+
/** Zip entry name of the OPF; hrefs resolve relative to its directory. */
|
|
11
|
+
readonly path: string;
|
|
12
|
+
readonly title?: string;
|
|
13
|
+
readonly author?: string;
|
|
14
|
+
readonly language?: string;
|
|
15
|
+
readonly coverItem?: ManifestItem;
|
|
16
|
+
readonly manifest: readonly ManifestItem[];
|
|
17
|
+
readonly itemById: ReadonlyMap<string, ManifestItem>;
|
|
18
|
+
/** Spine itemref idrefs in reading order. */
|
|
19
|
+
readonly spine: readonly string[];
|
|
20
|
+
/** Manifest id of the NCX named by the spine's toc attribute. */
|
|
21
|
+
readonly ncxId?: string;
|
|
22
|
+
readonly direction?: 'ltr' | 'rtl';
|
|
23
|
+
readonly fixedLayout?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function opfPathFromContainer(xml: string): string;
|
|
26
|
+
export declare function parseOpf(xml: string, path: string): OpfPackage;
|
|
27
|
+
//# sourceMappingURL=opf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opf.d.ts","sourceRoot":"","sources":["../../../src/formats/epub/opf.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrD,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAID,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASxD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAyD9D"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { attribute, childrenNamed, descendantsNamed, firstChildNamed, parseXml, } from '../xml.js';
|
|
2
|
+
const PACKAGE_MEDIA_TYPE = 'application/oebps-package+xml';
|
|
3
|
+
export function opfPathFromContainer(xml) {
|
|
4
|
+
const root = parseXml(xml);
|
|
5
|
+
const rootfiles = descendantsNamed(root, 'rootfile');
|
|
6
|
+
const chosen = rootfiles.find((r) => attribute(r, 'media-type') === PACKAGE_MEDIA_TYPE) ?? rootfiles[0];
|
|
7
|
+
const fullPath = chosen === undefined ? undefined : attribute(chosen, 'full-path');
|
|
8
|
+
if (fullPath === undefined || fullPath === '') {
|
|
9
|
+
throw new Error('the container document names no package rootfile');
|
|
10
|
+
}
|
|
11
|
+
return fullPath;
|
|
12
|
+
}
|
|
13
|
+
export function parseOpf(xml, path) {
|
|
14
|
+
const root = parseXml(xml);
|
|
15
|
+
if (root.localName !== 'package') {
|
|
16
|
+
throw new Error(`root element is <${root.name}>, expected <package>`);
|
|
17
|
+
}
|
|
18
|
+
const manifestElement = firstChildNamed(root, 'manifest');
|
|
19
|
+
if (manifestElement === undefined)
|
|
20
|
+
throw new Error('the package has no <manifest>');
|
|
21
|
+
const spineElement = firstChildNamed(root, 'spine');
|
|
22
|
+
if (spineElement === undefined)
|
|
23
|
+
throw new Error('the package has no <spine>');
|
|
24
|
+
const manifest = [];
|
|
25
|
+
for (const item of childrenNamed(manifestElement, 'item')) {
|
|
26
|
+
const id = attribute(item, 'id');
|
|
27
|
+
const href = attribute(item, 'href');
|
|
28
|
+
if (id === undefined || href === undefined)
|
|
29
|
+
continue;
|
|
30
|
+
const mediaType = attribute(item, 'media-type') ?? 'application/octet-stream';
|
|
31
|
+
const properties = (attribute(item, 'properties') ?? '').split(/\s+/).filter((p) => p !== '');
|
|
32
|
+
const fallback = attribute(item, 'fallback');
|
|
33
|
+
manifest.push({
|
|
34
|
+
id,
|
|
35
|
+
href,
|
|
36
|
+
mediaType,
|
|
37
|
+
properties,
|
|
38
|
+
...(fallback === undefined || fallback === '' ? {} : { fallback }),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const itemById = new Map(manifest.map((item) => [item.id, item]));
|
|
42
|
+
const spine = [];
|
|
43
|
+
for (const itemref of childrenNamed(spineElement, 'itemref')) {
|
|
44
|
+
const idref = attribute(itemref, 'idref');
|
|
45
|
+
if (idref !== undefined)
|
|
46
|
+
spine.push(idref);
|
|
47
|
+
}
|
|
48
|
+
const ncxId = attribute(spineElement, 'toc');
|
|
49
|
+
const progression = attribute(spineElement, 'page-progression-direction');
|
|
50
|
+
const direction = progression === 'ltr' || progression === 'rtl' ? progression : undefined;
|
|
51
|
+
const metadataElement = firstChildNamed(root, 'metadata');
|
|
52
|
+
const title = metadataElement === undefined ? undefined : dcText(metadataElement, 'title');
|
|
53
|
+
const author = metadataElement === undefined ? undefined : dcText(metadataElement, 'creator');
|
|
54
|
+
const language = metadataElement === undefined ? undefined : dcText(metadataElement, 'language');
|
|
55
|
+
const coverItem = findCoverItem(metadataElement, manifest, itemById);
|
|
56
|
+
const fixedLayout = metadataElement === undefined ? undefined : renditionLayout(metadataElement);
|
|
57
|
+
return {
|
|
58
|
+
path,
|
|
59
|
+
...(title === undefined ? {} : { title }),
|
|
60
|
+
...(author === undefined ? {} : { author }),
|
|
61
|
+
...(language === undefined ? {} : { language }),
|
|
62
|
+
...(coverItem === undefined ? {} : { coverItem }),
|
|
63
|
+
manifest,
|
|
64
|
+
itemById,
|
|
65
|
+
spine,
|
|
66
|
+
...(ncxId === undefined || ncxId === '' ? {} : { ncxId }),
|
|
67
|
+
...(direction === undefined ? {} : { direction }),
|
|
68
|
+
...(fixedLayout === undefined ? {} : { fixedLayout }),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function renditionLayout(metadata) {
|
|
72
|
+
for (const meta of descendantsNamed(metadata, 'meta')) {
|
|
73
|
+
if (attribute(meta, 'property') !== 'rendition:layout')
|
|
74
|
+
continue;
|
|
75
|
+
const value = meta.text.trim();
|
|
76
|
+
if (value === 'pre-paginated')
|
|
77
|
+
return true;
|
|
78
|
+
if (value === 'reflowable')
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
function dcText(metadata, localName) {
|
|
84
|
+
for (const element of descendantsNamed(metadata, localName)) {
|
|
85
|
+
const text = element.text.trim();
|
|
86
|
+
if (text !== '')
|
|
87
|
+
return text;
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
function findCoverItem(metadata, manifest, itemById) {
|
|
92
|
+
const flagged = manifest.find((item) => item.properties.includes('cover-image'));
|
|
93
|
+
if (flagged !== undefined)
|
|
94
|
+
return flagged;
|
|
95
|
+
if (metadata === undefined)
|
|
96
|
+
return undefined;
|
|
97
|
+
for (const meta of descendantsNamed(metadata, 'meta')) {
|
|
98
|
+
if (attribute(meta, 'name') !== 'cover')
|
|
99
|
+
continue;
|
|
100
|
+
const content = attribute(meta, 'content');
|
|
101
|
+
if (content === undefined || content === '')
|
|
102
|
+
continue;
|
|
103
|
+
// Some publishers put the image href in content instead of the item id.
|
|
104
|
+
const item = itemById.get(content) ?? manifest.find((candidate) => candidate.href === content);
|
|
105
|
+
if (item !== undefined)
|
|
106
|
+
return item;
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=opf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opf.js","sourceRoot":"","sources":["../../../src/formats/epub/opf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { TocItem } from '../../core/index.ts';
|
|
2
|
+
/** Resolved zip entry name → section id, for turning TOC targets into section references. */
|
|
3
|
+
export type SectionByPath = ReadonlyMap<string, string>;
|
|
4
|
+
export declare function parseNavToc(xml: string, navPath: string, sectionByPath: SectionByPath): TocItem[];
|
|
5
|
+
export declare function parseNcxToc(xml: string, ncxPath: string, sectionByPath: SectionByPath): TocItem[];
|
|
6
|
+
//# sourceMappingURL=toc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../../src/formats/epub/toc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAanD,6FAA6F;AAC7F,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,EAAE,CAejG;AAyBD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,EAAE,CAWjG"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { collapseWhitespace as collapse } from '../../core/text.js';
|
|
2
|
+
import { directoryOf, resolveHref } from './href.js';
|
|
3
|
+
import { attribute, childrenNamed, deepText, descendantsNamed, firstChildNamed, parseXml, } from '../xml.js';
|
|
4
|
+
export function parseNavToc(xml, navPath, sectionByPath) {
|
|
5
|
+
const root = parseXml(xml);
|
|
6
|
+
const navs = descendantsNamed(root, 'nav');
|
|
7
|
+
const tocNav = navs.find((nav) => (attribute(nav, 'type') ?? '').split(/\s+/).includes('toc')) ??
|
|
8
|
+
navs.find((nav) => descendantsNamed(nav, 'ol').length > 0);
|
|
9
|
+
const list = tocNav === undefined ? undefined : (firstChildNamed(tocNav, 'ol') ?? descendantsNamed(tocNav, 'ol')[0]);
|
|
10
|
+
if (list === undefined)
|
|
11
|
+
return [];
|
|
12
|
+
const baseDir = directoryOf(navPath);
|
|
13
|
+
const items = [];
|
|
14
|
+
for (const li of childrenNamed(list, 'li')) {
|
|
15
|
+
const item = navListEntry(li, baseDir, navPath, sectionByPath);
|
|
16
|
+
if (item !== undefined)
|
|
17
|
+
items.push(item);
|
|
18
|
+
}
|
|
19
|
+
return items;
|
|
20
|
+
}
|
|
21
|
+
function navListEntry(li, baseDir, navPath, sectionByPath) {
|
|
22
|
+
const anchor = firstChildNamed(li, 'a');
|
|
23
|
+
const labelSource = anchor ?? firstChildNamed(li, 'span');
|
|
24
|
+
const label = collapse(labelSource === undefined ? li.text : deepText(labelSource));
|
|
25
|
+
const children = [];
|
|
26
|
+
const childList = firstChildNamed(li, 'ol');
|
|
27
|
+
if (childList !== undefined) {
|
|
28
|
+
for (const child of childrenNamed(childList, 'li')) {
|
|
29
|
+
const item = navListEntry(child, baseDir, navPath, sectionByPath);
|
|
30
|
+
if (item !== undefined)
|
|
31
|
+
children.push(item);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const href = anchor === undefined ? undefined : attribute(anchor, 'href');
|
|
35
|
+
return tocEntry(label, resolveTarget(href, baseDir, navPath), children, sectionByPath);
|
|
36
|
+
}
|
|
37
|
+
export function parseNcxToc(xml, ncxPath, sectionByPath) {
|
|
38
|
+
const root = parseXml(xml);
|
|
39
|
+
const navMap = descendantsNamed(root, 'navMap')[0];
|
|
40
|
+
if (navMap === undefined)
|
|
41
|
+
return [];
|
|
42
|
+
const baseDir = directoryOf(ncxPath);
|
|
43
|
+
const items = [];
|
|
44
|
+
for (const navPoint of childrenNamed(navMap, 'navPoint')) {
|
|
45
|
+
const item = navPointEntry(navPoint, baseDir, ncxPath, sectionByPath);
|
|
46
|
+
if (item !== undefined)
|
|
47
|
+
items.push(item);
|
|
48
|
+
}
|
|
49
|
+
return items;
|
|
50
|
+
}
|
|
51
|
+
function navPointEntry(navPoint, baseDir, ncxPath, sectionByPath) {
|
|
52
|
+
const navLabel = firstChildNamed(navPoint, 'navLabel');
|
|
53
|
+
const text = navLabel === undefined ? undefined : firstChildNamed(navLabel, 'text');
|
|
54
|
+
const label = collapse(text === undefined ? '' : deepText(text));
|
|
55
|
+
const children = [];
|
|
56
|
+
for (const child of childrenNamed(navPoint, 'navPoint')) {
|
|
57
|
+
const item = navPointEntry(child, baseDir, ncxPath, sectionByPath);
|
|
58
|
+
if (item !== undefined)
|
|
59
|
+
children.push(item);
|
|
60
|
+
}
|
|
61
|
+
const src = firstChildNamed(navPoint, 'content');
|
|
62
|
+
const href = src === undefined ? undefined : attribute(src, 'src');
|
|
63
|
+
return tocEntry(label, resolveTarget(href, baseDir, ncxPath), children, sectionByPath);
|
|
64
|
+
}
|
|
65
|
+
function resolveTarget(href, baseDir, documentPath) {
|
|
66
|
+
if (href === undefined || href === '')
|
|
67
|
+
return undefined;
|
|
68
|
+
if (href.startsWith('#'))
|
|
69
|
+
return { path: documentPath, fragment: href.slice(1) };
|
|
70
|
+
return resolveHref(baseDir, href);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* An entry with no resolvable target of its own borrows its first child's
|
|
74
|
+
* section (a heading-only li / a navPoint pointing outside the spine);
|
|
75
|
+
* with no children either, it is dropped.
|
|
76
|
+
*/
|
|
77
|
+
function tocEntry(label, target, children, sectionByPath) {
|
|
78
|
+
const sectionId = target === undefined ? undefined : sectionByPath.get(target.path);
|
|
79
|
+
if (sectionId !== undefined) {
|
|
80
|
+
const fragment = target?.fragment;
|
|
81
|
+
return { label, sectionId, ...(fragment === undefined ? {} : { fragment }), children };
|
|
82
|
+
}
|
|
83
|
+
const first = children[0];
|
|
84
|
+
if (first === undefined)
|
|
85
|
+
return undefined;
|
|
86
|
+
return { label, sectionId: first.sectionId, children };
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=toc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toc.js","sourceRoot":"","sources":["../../../src/formats/epub/toc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BookFormat } from '../../core/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* FictionBook 2 (FB2) format. A single XML file with the whole book inside:
|
|
4
|
+
* `description` metadata, one or more `body` elements of nested `<section>`s, and
|
|
5
|
+
* inline base64 `<binary>` images. The seam probe's second format (PLAN M4-2):
|
|
6
|
+
* it proves the `Book` model fits a container-less, single-file, cross-referencing
|
|
7
|
+
* format without bending — sections come from `<section>`s, images from `<binary>`
|
|
8
|
+
* via `Section.resolve`, and footnotes ride the reader's existing internal-link
|
|
9
|
+
* back-stack because every in-book link is rewritten to a `sectionId#elementId`
|
|
10
|
+
* href the reader already knows how to follow.
|
|
11
|
+
*/
|
|
12
|
+
export declare const fb2: BookFormat;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/formats/fb2/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,UAAU,EAAwD,MAAM,qBAAqB,CAAC;AAclH;;;;;;;;;GASG;AACH,eAAO,MAAM,GAAG,EAAE,UAkCjB,CAAC"}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/*! wolfy-reader v0.1.0 | @license MIT | (c) Vitaliy Tkachuk | github.com/vitaliy-tkachuk/wolfy-reader */
|
|
2
|
+
import { CorruptContainerError } from '../../core/index.js';
|
|
3
|
+
import { sectionLookup } from '../../core/lookup.js';
|
|
4
|
+
import { collapseWhitespace, escapeXmlAttribute, escapeXmlText } from '../../core/text.js';
|
|
5
|
+
import { attribute, childrenNamed, decodeXml, deepText, firstChildNamed, parseXml, } from '../xml.js';
|
|
6
|
+
/**
|
|
7
|
+
* FictionBook 2 (FB2) format. A single XML file with the whole book inside:
|
|
8
|
+
* `description` metadata, one or more `body` elements of nested `<section>`s, and
|
|
9
|
+
* inline base64 `<binary>` images. The seam probe's second format (PLAN M4-2):
|
|
10
|
+
* it proves the `Book` model fits a container-less, single-file, cross-referencing
|
|
11
|
+
* format without bending — sections come from `<section>`s, images from `<binary>`
|
|
12
|
+
* via `Section.resolve`, and footnotes ride the reader's existing internal-link
|
|
13
|
+
* back-stack because every in-book link is rewritten to a `sectionId#elementId`
|
|
14
|
+
* href the reader already knows how to follow.
|
|
15
|
+
*/
|
|
16
|
+
export const fb2 = {
|
|
17
|
+
name: 'fb2',
|
|
18
|
+
async sniff(source) {
|
|
19
|
+
const head = await source.read(0, Math.min(source.size, 1024));
|
|
20
|
+
// A UTF-16 BOM must be honored first: read as Latin-1, every other byte of a
|
|
21
|
+
// UTF-16 head is NUL and `<FictionBook` never matches, so a BOM'd UTF-16 FB2
|
|
22
|
+
// would fall through to the text format's catch-all sniff. Without a BOM,
|
|
23
|
+
// read as Latin-1 so the root element name is legible whatever the real
|
|
24
|
+
// encoding is; the FB2 root is always near the top.
|
|
25
|
+
let text;
|
|
26
|
+
if (head[0] === 0xff && head[1] === 0xfe)
|
|
27
|
+
text = new TextDecoder('utf-16le').decode(head);
|
|
28
|
+
else if (head[0] === 0xfe && head[1] === 0xff)
|
|
29
|
+
text = new TextDecoder('utf-16be').decode(head);
|
|
30
|
+
else {
|
|
31
|
+
text = '';
|
|
32
|
+
for (let i = 0; i < head.length; i += 1)
|
|
33
|
+
text += String.fromCharCode(head[i]);
|
|
34
|
+
}
|
|
35
|
+
return /<\s*FictionBook[\s>]/.test(text);
|
|
36
|
+
},
|
|
37
|
+
async decode(source) {
|
|
38
|
+
const bytes = await source.read(0, source.size);
|
|
39
|
+
let root;
|
|
40
|
+
try {
|
|
41
|
+
// Tolerant parse: real-world FB2 is frequently sloppy (valueless attributes,
|
|
42
|
+
// a mismatched close tag), and one such slip must not discard an otherwise
|
|
43
|
+
// readable book. Grossly malformed input still fails and is wrapped below.
|
|
44
|
+
root = parseXml(decodeXml(bytes), { tolerant: true });
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw new CorruptContainerError('the FB2 document is not well-formed XML', { cause: error });
|
|
48
|
+
}
|
|
49
|
+
if (root.localName !== 'FictionBook') {
|
|
50
|
+
throw new CorruptContainerError('the root element is not <FictionBook>');
|
|
51
|
+
}
|
|
52
|
+
return buildBook(root);
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
function collectBinaries(root) {
|
|
56
|
+
const out = new Map();
|
|
57
|
+
for (const bin of childrenNamed(root, 'binary')) {
|
|
58
|
+
const id = attribute(bin, 'id');
|
|
59
|
+
if (id === undefined)
|
|
60
|
+
continue;
|
|
61
|
+
const mediaType = attribute(bin, 'content-type') ?? 'application/octet-stream';
|
|
62
|
+
out.set(id, { mediaType, bytes: decodeBase64(bin.text) });
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
function decodeBase64(b64) {
|
|
67
|
+
const clean = b64.replace(/\s+/g, '');
|
|
68
|
+
const binary = atob(clean);
|
|
69
|
+
const out = new Uint8Array(binary.length);
|
|
70
|
+
for (let i = 0; i < binary.length; i += 1)
|
|
71
|
+
out[i] = binary.charCodeAt(i);
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
function buildBook(root) {
|
|
75
|
+
const binaries = collectBinaries(root);
|
|
76
|
+
const bodies = childrenNamed(root, 'body');
|
|
77
|
+
const mainBody = bodies.find((b) => attribute(b, 'name') === undefined) ?? bodies[0];
|
|
78
|
+
const noteBodies = bodies.filter((b) => b !== mainBody);
|
|
79
|
+
// Plan the Book sections: each top-level <section> of the main body is one
|
|
80
|
+
// section; each notes body is one section (so footnote targets resolve there).
|
|
81
|
+
const planned = [];
|
|
82
|
+
const mainSections = mainBody === undefined ? [] : childrenNamed(mainBody, 'section');
|
|
83
|
+
mainSections.forEach((section, i) => planned.push({ id: `s${i}`, source: section, headingLevel: 2 }));
|
|
84
|
+
// A main body may hold bare paragraphs with no <section> wrapper; keep them as a
|
|
85
|
+
// single section so nothing is dropped.
|
|
86
|
+
if (mainSections.length === 0 && mainBody !== undefined) {
|
|
87
|
+
planned.push({ id: 's0', source: mainBody, headingLevel: 2 });
|
|
88
|
+
}
|
|
89
|
+
noteBodies.forEach((body, i) => planned.push({ id: `nb${i}`, source: body, headingLevel: 3 }));
|
|
90
|
+
// Map every FB2 element id to the Book section that renders it, so an in-book
|
|
91
|
+
// link `#id` can be rewritten to a `sectionId#id` href the reader can follow
|
|
92
|
+
// across sections (a bare `#id` only seeks the current section).
|
|
93
|
+
const idToSection = new Map();
|
|
94
|
+
for (const plan of planned) {
|
|
95
|
+
for (const el of elementsWithId(plan.source)) {
|
|
96
|
+
const id = attribute(el, 'id');
|
|
97
|
+
if (id !== undefined && !idToSection.has(id))
|
|
98
|
+
idToSection.set(id, plan.id);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const sections = planned.map((plan) => {
|
|
102
|
+
const html = renderDocument(plan.source, plan.headingLevel, idToSection);
|
|
103
|
+
return {
|
|
104
|
+
id: plan.id,
|
|
105
|
+
mediaType: 'application/xhtml+xml',
|
|
106
|
+
load: () => Promise.resolve(new TextEncoder().encode(html)),
|
|
107
|
+
resolve: (reference) => resolveBinary(reference, binaries),
|
|
108
|
+
};
|
|
109
|
+
});
|
|
110
|
+
return {
|
|
111
|
+
metadata: readMetadata(root, binaries),
|
|
112
|
+
toc: buildToc(mainSections, planned),
|
|
113
|
+
sections,
|
|
114
|
+
section: sectionLookup(sections),
|
|
115
|
+
resources: resourceMap(binaries),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function resolveBinary(reference, binaries) {
|
|
119
|
+
const id = reference.startsWith('#') ? reference.slice(1) : reference;
|
|
120
|
+
const bin = binaries.get(id);
|
|
121
|
+
if (bin === undefined)
|
|
122
|
+
return undefined;
|
|
123
|
+
return { mediaType: bin.mediaType, load: () => Promise.resolve(bin.bytes) };
|
|
124
|
+
}
|
|
125
|
+
function resourceMap(binaries) {
|
|
126
|
+
const out = new Map();
|
|
127
|
+
for (const [id, bin] of binaries) {
|
|
128
|
+
out.set(id, { mediaType: bin.mediaType, load: () => Promise.resolve(bin.bytes) });
|
|
129
|
+
}
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
function elementsWithId(root) {
|
|
133
|
+
const out = [];
|
|
134
|
+
const walk = (el) => {
|
|
135
|
+
if (attribute(el, 'id') !== undefined)
|
|
136
|
+
out.push(el);
|
|
137
|
+
for (const child of el.children)
|
|
138
|
+
walk(child);
|
|
139
|
+
};
|
|
140
|
+
walk(root);
|
|
141
|
+
return out;
|
|
142
|
+
}
|
|
143
|
+
// --- metadata ---------------------------------------------------------------
|
|
144
|
+
function readMetadata(root, binaries) {
|
|
145
|
+
const description = firstChildNamed(root, 'description');
|
|
146
|
+
const titleInfo = description === undefined ? undefined : firstChildNamed(description, 'title-info');
|
|
147
|
+
if (titleInfo === undefined)
|
|
148
|
+
return {};
|
|
149
|
+
const title = textOf(firstChildNamed(titleInfo, 'book-title'));
|
|
150
|
+
const language = textOf(firstChildNamed(titleInfo, 'lang'));
|
|
151
|
+
const author = authorName(firstChildNamed(titleInfo, 'author'));
|
|
152
|
+
const cover = coverResource(titleInfo, binaries);
|
|
153
|
+
return {
|
|
154
|
+
...(title === undefined ? {} : { title }),
|
|
155
|
+
...(author === undefined ? {} : { author }),
|
|
156
|
+
...(language === undefined ? {} : { language }),
|
|
157
|
+
...(cover === undefined ? {} : { cover }),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function authorName(author) {
|
|
161
|
+
if (author === undefined)
|
|
162
|
+
return undefined;
|
|
163
|
+
const nick = textOf(firstChildNamed(author, 'nickname'));
|
|
164
|
+
const parts = [
|
|
165
|
+
textOf(firstChildNamed(author, 'first-name')),
|
|
166
|
+
textOf(firstChildNamed(author, 'middle-name')),
|
|
167
|
+
textOf(firstChildNamed(author, 'last-name')),
|
|
168
|
+
].filter((p) => p !== undefined && p.length > 0);
|
|
169
|
+
if (parts.length > 0)
|
|
170
|
+
return parts.join(' ');
|
|
171
|
+
return nick;
|
|
172
|
+
}
|
|
173
|
+
function coverResource(titleInfo, binaries) {
|
|
174
|
+
const coverpage = firstChildNamed(titleInfo, 'coverpage');
|
|
175
|
+
if (coverpage === undefined)
|
|
176
|
+
return undefined;
|
|
177
|
+
const image = firstChildNamed(coverpage, 'image');
|
|
178
|
+
const href = image === undefined ? undefined : attribute(image, 'href');
|
|
179
|
+
if (href === undefined)
|
|
180
|
+
return undefined;
|
|
181
|
+
return resolveBinary(href, binaries);
|
|
182
|
+
}
|
|
183
|
+
function textOf(element) {
|
|
184
|
+
if (element === undefined)
|
|
185
|
+
return undefined;
|
|
186
|
+
const text = collapseWhitespace(deepText(element));
|
|
187
|
+
return text.length === 0 ? undefined : text;
|
|
188
|
+
}
|
|
189
|
+
// --- TOC --------------------------------------------------------------------
|
|
190
|
+
function buildToc(mainSections, planned) {
|
|
191
|
+
const toc = [];
|
|
192
|
+
mainSections.forEach((section, i) => {
|
|
193
|
+
const plan = planned[i];
|
|
194
|
+
if (plan === undefined)
|
|
195
|
+
return;
|
|
196
|
+
const label = sectionTitle(section) ?? `Section ${i + 1}`;
|
|
197
|
+
const children = [];
|
|
198
|
+
for (const nested of childrenNamed(section, 'section')) {
|
|
199
|
+
const id = attribute(nested, 'id');
|
|
200
|
+
const nestedLabel = sectionTitle(nested);
|
|
201
|
+
if (nestedLabel === undefined)
|
|
202
|
+
continue;
|
|
203
|
+
children.push({
|
|
204
|
+
label: nestedLabel,
|
|
205
|
+
sectionId: plan.id,
|
|
206
|
+
...(id === undefined ? {} : { fragment: id }),
|
|
207
|
+
children: [],
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
toc.push({ label, sectionId: plan.id, children });
|
|
211
|
+
});
|
|
212
|
+
return toc;
|
|
213
|
+
}
|
|
214
|
+
function sectionTitle(section) {
|
|
215
|
+
const title = firstChildNamed(section, 'title');
|
|
216
|
+
return textOf(title);
|
|
217
|
+
}
|
|
218
|
+
// --- rendering FB2 → XHTML --------------------------------------------------
|
|
219
|
+
const INLINE_TAG = {
|
|
220
|
+
emphasis: 'em',
|
|
221
|
+
strong: 'strong',
|
|
222
|
+
strikethrough: 's',
|
|
223
|
+
sub: 'sub',
|
|
224
|
+
sup: 'sup',
|
|
225
|
+
code: 'code',
|
|
226
|
+
};
|
|
227
|
+
function renderDocument(root, headingLevel, idToSection) {
|
|
228
|
+
const body = renderChildren(root, headingLevel, idToSection);
|
|
229
|
+
return `<?xml version="1.0" encoding="UTF-8"?>\n<html xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="UTF-8"/></head><body>${body}</body></html>`;
|
|
230
|
+
}
|
|
231
|
+
function renderChildren(el, headingLevel, idToSection) {
|
|
232
|
+
let out = '';
|
|
233
|
+
for (const node of el.content) {
|
|
234
|
+
out += typeof node === 'string' ? escapeXmlText(node) : renderElement(node, headingLevel, idToSection);
|
|
235
|
+
}
|
|
236
|
+
return out;
|
|
237
|
+
}
|
|
238
|
+
function renderElement(el, headingLevel, idToSection) {
|
|
239
|
+
const id = attribute(el, 'id');
|
|
240
|
+
const idAttr = id === undefined ? '' : ` id="${escapeXmlAttribute(id)}"`;
|
|
241
|
+
switch (el.localName) {
|
|
242
|
+
case 'section': {
|
|
243
|
+
const inner = renderChildren(el, Math.min(headingLevel + 1, 6), idToSection);
|
|
244
|
+
return `<div class="fb2-section"${idAttr}>${inner}</div>`;
|
|
245
|
+
}
|
|
246
|
+
case 'title': {
|
|
247
|
+
const level = Math.min(headingLevel, 6);
|
|
248
|
+
return `<h${level}${idAttr}>${renderInlineLines(el, idToSection)}</h${level}>`;
|
|
249
|
+
}
|
|
250
|
+
case 'subtitle':
|
|
251
|
+
return `<h${Math.min(headingLevel + 1, 6)}${idAttr}>${renderChildren(el, headingLevel, idToSection)}</h${Math.min(headingLevel + 1, 6)}>`;
|
|
252
|
+
case 'p':
|
|
253
|
+
return `<p${idAttr}>${renderChildren(el, headingLevel, idToSection)}</p>`;
|
|
254
|
+
case 'empty-line':
|
|
255
|
+
return `<p class="fb2-empty-line"${idAttr}></p>`;
|
|
256
|
+
case 'a': {
|
|
257
|
+
const href = rewriteHref(attribute(el, 'href'), idToSection);
|
|
258
|
+
const hrefAttr = href === undefined ? '' : ` href="${escapeXmlAttribute(href)}"`;
|
|
259
|
+
return `<a${hrefAttr}${idAttr}>${renderChildren(el, headingLevel, idToSection)}</a>`;
|
|
260
|
+
}
|
|
261
|
+
case 'image': {
|
|
262
|
+
const href = attribute(el, 'href');
|
|
263
|
+
const src = href === undefined ? '' : href.startsWith('#') ? href.slice(1) : href;
|
|
264
|
+
const alt = attribute(el, 'alt') ?? '';
|
|
265
|
+
return `<img src="${escapeXmlAttribute(src)}" alt="${escapeXmlAttribute(alt)}"${idAttr}/>`;
|
|
266
|
+
}
|
|
267
|
+
case 'epigraph':
|
|
268
|
+
return `<div class="fb2-epigraph"${idAttr}>${renderChildren(el, headingLevel, idToSection)}</div>`;
|
|
269
|
+
case 'cite':
|
|
270
|
+
return `<blockquote${idAttr}>${renderChildren(el, headingLevel, idToSection)}</blockquote>`;
|
|
271
|
+
case 'poem':
|
|
272
|
+
return `<div class="fb2-poem"${idAttr}>${renderChildren(el, headingLevel, idToSection)}</div>`;
|
|
273
|
+
case 'stanza':
|
|
274
|
+
return `<div class="fb2-stanza"${idAttr}>${renderChildren(el, headingLevel, idToSection)}</div>`;
|
|
275
|
+
case 'v':
|
|
276
|
+
return `<p class="fb2-verse"${idAttr}>${renderChildren(el, headingLevel, idToSection)}</p>`;
|
|
277
|
+
case 'text-author':
|
|
278
|
+
return `<p class="fb2-text-author"${idAttr}>${renderChildren(el, headingLevel, idToSection)}</p>`;
|
|
279
|
+
case 'annotation':
|
|
280
|
+
return `<div class="fb2-annotation"${idAttr}>${renderChildren(el, headingLevel, idToSection)}</div>`;
|
|
281
|
+
default: {
|
|
282
|
+
const inline = INLINE_TAG[el.localName];
|
|
283
|
+
if (inline !== undefined) {
|
|
284
|
+
return `<${inline}${idAttr}>${renderChildren(el, headingLevel, idToSection)}</${inline}>`;
|
|
285
|
+
}
|
|
286
|
+
// Unknown element renders transparently (its children only), so no FB2
|
|
287
|
+
// content is lost even for tags this map does not name.
|
|
288
|
+
return renderChildren(el, headingLevel, idToSection);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/** A title/verse block whose <p> lines join with <br/> rather than nesting <p>. */
|
|
293
|
+
function renderInlineLines(el, idToSection) {
|
|
294
|
+
const lines = [];
|
|
295
|
+
for (const child of el.children) {
|
|
296
|
+
if (child.localName === 'p')
|
|
297
|
+
lines.push(renderChildren(child, 0, idToSection));
|
|
298
|
+
}
|
|
299
|
+
if (lines.length > 0)
|
|
300
|
+
return lines.join('<br/>');
|
|
301
|
+
return renderChildren(el, 0, idToSection);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Rewrites an in-book `#id` link to `sectionId#id` so the reader follows it across
|
|
305
|
+
* sections (a bare `#id` only seeks the current section). A link to an unknown id,
|
|
306
|
+
* or an external/scheme href, is left as authored.
|
|
307
|
+
*/
|
|
308
|
+
function rewriteHref(href, idToSection) {
|
|
309
|
+
if (href === undefined)
|
|
310
|
+
return undefined;
|
|
311
|
+
if (!href.startsWith('#'))
|
|
312
|
+
return href;
|
|
313
|
+
const id = href.slice(1);
|
|
314
|
+
const sectionId = idToSection.get(id);
|
|
315
|
+
return sectionId === undefined ? href : `${sectionId}#${id}`;
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/formats/fb2/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formats/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formats/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC"}
|