diff --git a/base b/base index 7b05d5a73..9ba142825 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 7b05d5a73980f852290e3f10e6078cc88162bbea +Subproject commit 9ba142825282b44446d09985669022ac9e3ba64e diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 1634b7ea4..2790c358f 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -1203,6 +1203,12 @@ function ReaderRolling:checkXPointersAndProposeDOMVersionUpgrade() -- Set latest DOM version, to be used at next load local latest_dom_version = self.ui.document:getLatestDomVersion() + -- For some formats, DOM version 20200824 uses a new HTML parser that may build + -- a different DOM tree. So, migrate these to a lower version + local doc_format = self.ui.document:getDocumentFormat() + if doc_format == "HTML" or doc_format == "CHM" or doc_format == "PDB" then + latest_dom_version = self.ui.document:getDomVersionWithNormalizedXPointers() + end self.ui.doc_settings:saveSetting("cre_dom_version", latest_dom_version) logger.info(" cre_dom_version updated to", latest_dom_version) diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index 6ee85fa40..8d68382ba 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -53,6 +53,7 @@ local ReaderZooming = require("apps/reader/modules/readerzooming") local Screenshoter = require("ui/widget/screenshoter") local SettingsMigration = require("ui/data/settings_migration") local UIManager = require("ui/uimanager") +local ffiUtil = require("ffi/util") local lfs = require("libs/libkoreader-lfs") local logger = require("logger") local util = require("util") @@ -270,15 +271,22 @@ function ReaderUI:init() end -- make sure we render document first before calling any callback self:registerPostInitCallback(function() + local start_ts = ffiUtil.getTimestamp() if not self.document:loadDocument() then self:dealWithLoadDocumentFailure() end + logger.dbg(string.format(" loading took %.3f seconds", ffiUtil.getDuration(start_ts))) -- used to read additional settings after the document has been -- loaded (but not rendered yet) self:handleEvent(Event:new("PreRenderDocument", self.doc_settings)) + start_ts = ffiUtil.getTimestamp() self.document:render() + logger.dbg(string.format(" rendering took %.3f seconds", ffiUtil.getDuration(start_ts))) + + -- Uncomment to output the built DOM (for debugging) + -- logger.dbg(self.document:getHTMLFromXPointer(".0", 0x6830)) end) -- styletweak controller (must be before typeset controller) self:registerModule("styletweak", ReaderStyleTweak:new{ diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index 17b28b84f..32cc2aa34 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -180,6 +180,10 @@ function CreDocument:requestDomVersion(version) cre.requestDomVersion(version) end +function CreDocument:getDocumentFormat() + return self._document:getDocumentFormat() +end + function CreDocument:setupDefaultView() if self.loaded then -- Don't apply defaults if the document has already been loaded