EPUB: support display-options.xml

This commit is contained in:
John Factotum
2024-06-22 01:42:47 +08:00
parent 37626ba44a
commit 51c02bf594
+18
View File
@@ -788,6 +788,14 @@ const getPageSpread = properties => {
} }
} }
const getDisplayOptions = doc => {
if (!doc) return null
return {
fixedLayout: getElementText(doc.querySelector('option[name="fixed-layout"]')),
openToSpread: getElementText(doc.querySelector('option[name="open-to-spread"]')),
}
}
export class EPUB { export class EPUB {
parser = new DOMParser() parser = new DOMParser()
#loader #loader
@@ -880,6 +888,16 @@ ${doc.querySelector('parsererror').innerText}`)
this.rendition = rendition this.rendition = rendition
this.media = media this.media = media
this.dir = this.resources.pageProgressionDirection this.dir = this.resources.pageProgressionDirection
const displayOptions = getDisplayOptions(
await this.#loadXML('META-INF/com.apple.ibooks.display-options.xml')
?? await this.#loadXML('META-INF/com.kobobooks.display-options.xml'))
if (displayOptions) {
if (displayOptions.fixedLayout === 'true')
this.rendition.layout ??= 'pre-paginated'
if (displayOptions.openToSpread === 'false') this.sections
.find(section => section.linear !== 'no').pageSpread ??=
this.dir === 'rtl' ? 'left' : 'right'
}
this.parsedMetadata = metadata // for debugging or advanced use cases this.parsedMetadata = metadata // for debugging or advanced use cases
const title = metadata?.title?.[0] const title = metadata?.title?.[0]