From cebd33ecc82b31ea688c58ecbb905528d96200cf Mon Sep 17 00:00:00 2001 From: Michael Whapples Date: Wed, 27 May 2026 15:55:22 +0100 Subject: [PATCH] Change to using XML syntax for XHTML files. --- .../kotlin/org/brailleblaster/ebraille/EBraillePackager.kt | 4 ++-- .../kotlin/org/brailleblaster/ebraille/NavigationHtml.kt | 6 +++--- .../src/main/kotlin/org/brailleblaster/ebraille/OpfUtils.kt | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/EBraillePackager.kt b/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/EBraillePackager.kt index ef831e0a..e11e0f05 100644 --- a/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/EBraillePackager.kt +++ b/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/EBraillePackager.kt @@ -35,8 +35,8 @@ object EBraillePackager { } } fun createEbraillePackage(outPath: Path, docs: List, title: String = "-", translationEngine: ITranslationEngine = UTDTranslationEngine()) { - val docItems = docs.mapIndexed { i, doc -> HtmlItem("ebraille/document${i}.html", doc) } - val navDoc = HtmlItem("index.html", NavigationHtml.createNavigationHtml(docItems, title = title, translationEngine = translationEngine), properties = "nav") + val docItems = docs.mapIndexed { i, doc -> XHtmlItem("ebraille/document${i}.html", doc) } + val navDoc = XHtmlItem("index.html", NavigationHtml.createNavigationHtml(docItems, title = title, translationEngine = translationEngine), properties = "nav") packageDocument(outPath, docItems + RESOURCE_ITEMS + navDoc) } private fun packageDocument(outPath: Path, packageItems: List) { diff --git a/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/NavigationHtml.kt b/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/NavigationHtml.kt index a937eff5..7c373006 100644 --- a/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/NavigationHtml.kt +++ b/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/NavigationHtml.kt @@ -41,7 +41,7 @@ object NavigationHtml { """.trimIndent() - fun createNavigationHtml(docs: Iterable, title: String, translationEngine: ITranslationEngine): Document { + fun createNavigationHtml(docs: Iterable, title: String, translationEngine: ITranslationEngine): Document { val titleBrl: String = translateToBraille(title, translationEngine) val template = javaClass.getResourceAsStream("/org/brailleblaster/ebraille/index_template.html")?.bufferedReader(Charsets.UTF_8)?.readText() ?: FALLBACK_TEMPLATE val html = Jsoup.parse(template) @@ -51,7 +51,7 @@ object NavigationHtml { html.body().appendChild(createPageList(docs, headingBrl = translateToBraille("List of pages", translationEngine))) return html } - private fun createHeadingsList(docs: Iterable, headingBrl: String = "⠠⠞⠁⠼ ⠷ ⠒⠞⠢⠞⠎"): Element = Element("nav").attr("role", "doc-toc").attr("aria-label", "Contents").attr("epub:type", "toc").appendChild(Element("h2").appendText(headingBrl)).apply { + private fun createHeadingsList(docs: Iterable, headingBrl: String = "⠠⠞⠁⠼ ⠷ ⠒⠞⠢⠞⠎"): Element = Element("nav").attr("role", "doc-toc").attr("aria-label", "Contents").attr("epub:type", "toc").appendChild(Element("h2").appendText(headingBrl)).apply { val idGenerator = IdGenerator() val headings = docs.flatMap { doc -> doc.document.select(HEADINGS_LEVEL_MAP.keys.joinToString(separator = ", ")).map { if (it.id().isEmpty()) { @@ -61,7 +61,7 @@ object NavigationHtml { } } appendChild(headings.toHtml(level = 0, containerFactory = { Element("ol") }, itemFactory = { listOf(Element("li").appendChild(Element("a").attr("href", "${it.element.path}#${it.element.element.id()}").appendText(it.element.element.text()))) })) } - private fun createPageList(docs: Iterable, headingBrl: String = "⠠⠇⠊⠌ ⠷ ⠏⠁⠛⠑⠎"): Element = Element("nav").attr("role", "doc-pagelist").attr("epub:type", "page-list").attr("aria-label", "Page list").attr("hidden", "").appendChild(Element("h2").appendText(headingBrl)).apply { + private fun createPageList(docs: Iterable, headingBrl: String = "⠠⠇⠊⠌ ⠷ ⠏⠁⠛⠑⠎"): Element = Element("nav").attr("role", "doc-pagelist").attr("epub:type", "page-list").attr("aria-label", "Page list").attr("hidden", "").appendChild(Element("h2").appendText(headingBrl)).apply { val idGenerator = IdGenerator() val pages = docs.flatMap { doc -> doc.document.select("""span[role="doc-pagebreak"]""").map { if (it.id().isEmpty()) { diff --git a/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/OpfUtils.kt b/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/OpfUtils.kt index 7a588225..ce508bcf 100644 --- a/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/OpfUtils.kt +++ b/brailleblaster-ebraille/src/main/kotlin/org/brailleblaster/ebraille/OpfUtils.kt @@ -94,12 +94,12 @@ interface PackageItem { fun write(output: OutputStream) } -data class HtmlItem(override val path: String, val document: org.jsoup.nodes.Document, override val includeInSpine: Boolean = true, - override val properties: String? = null) : PackageItem { +data class XHtmlItem(override val path: String, val document: org.jsoup.nodes.Document, override val includeInSpine: Boolean = true, + override val properties: String? = null) : PackageItem { override val mediaType: String = "application/xhtml+xml" override fun write(output: OutputStream) { output.bufferedWriter(Charsets.UTF_8).also { - document.html(it) + document.outputSettings(document.outputSettings().syntax(org.jsoup.nodes.Document.OutputSettings.Syntax.xml)).html(it) }.flush() } }