From 5f906ab473e4327987c8d38cd27e73607d454b4c Mon Sep 17 00:00:00 2001 From: Abe Jellinek Date: Wed, 5 Mar 2025 16:09:26 -0500 Subject: [PATCH] EPUB: Handle Ibid footnotes --- src/dom/epub/epub-view.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/dom/epub/epub-view.ts b/src/dom/epub/epub-view.ts index 3ee0c109..e0a786cf 100644 --- a/src/dom/epub/epub-view.ts +++ b/src/dom/epub/epub-view.ts @@ -925,6 +925,9 @@ class EPUBView extends DOMView { let container = doc.createElement('div'); + let handledIbid = false; + let ibidRe = /\bIbid\b/; + let current = element; let currentClone = current.cloneNode(true) as HTMLElement; while (!current.classList.contains('section-container')) { @@ -934,6 +937,23 @@ class EPUBView extends DOMView { } let parentClone = parent.cloneNode(false) as HTMLElement; parentClone.appendChild(currentClone); + + // If the current footnote contains "Ibid", keep prepending previous siblings + // until we find one that doesn't + if (!handledIbid + && current.previousElementSibling + && current.textContent + && ibidRe.test(current.textContent)) { + do { + current = current.previousElementSibling; + let currentClone = current.cloneNode(true) as HTMLElement; + parentClone.prepend(currentClone); + } + while (current.previousElementSibling?.textContent + && ibidRe.test(current.previousElementSibling.textContent)); + handledIbid = true; + } + currentClone = parentClone; current = parent; }