On Sat, Jul 04, 2020 at 07:50:41AM +0200, Jürgen Hubert wrote:

Unfortunately, the problem persisted even after this change. I investigated further by manually editing the 
EPUB file with Calibre, and it turns out that the problem wasn't actually the </span><span> tags - 
it was the line break between "the" and "Devil". The empty spaces _also_ seem to be 
displayed in the popup.

Yes, Amazon - one of the biggest companies in the world with massive amounts of IT 
resources - is unable to interpret HTML correctly with their "popup footnote" 
feature.

<headdesk>

I am always amazed how bad ebook readers are. The only evolution that happens is on the hardware side, stuff like backlighting, etc. But the actual rendering is still awfull and nobody seems to have problem with that. And then comes stuff like footnotes that are displayed as popups, instead of, you know, as footnotes are displayed in books for last few hundreds of years. And of course, even this awfull way is broken. I lost my hope in ebooks long ago, but this is another level.


So, uhm, do you see any way of eliminating this line break and the unnecessary 
empty spaces while compiling the EPUB file?

Otherwise I will just have to resign myself to either trying to fix this via 
half-remembered Unix regex commands (wince) or fixing my footnotes manually 
(double wince). It will be a chore, but it won't prevent publication...


Fortunatelly, we can use make4ht build files. Using the built-in XML processing, it is easy to normalize white spaces inside footnotes:

---------
local domfilter = require "make4ht-domfilter"

local function process_footnote(footnote)
  for _, node in ipairs(footnote:get_children()) do
    if node:is_text() then
      -- replace multiple white space with just obe space
      node._text = node._text:gsub("%s+", " ")
    elseif node:is_element() then
      -- recursivelly process child elements, like italics etc.
      process_footnote(node)
    end
  end
  return footnote
end
local process = domfilter {
  function(dom)
    for _, footnote in ipairs(dom:query_selector(".footnote-text")) do
      process_footnote(footnote)
    end
    return dom
  end
}

Make:match("html$", process)
----------

Save it as for example `mybuild.lua` and require using the `-e` option.

Best regards,
Michal

Reply via email to