From 8cfae790ed8f94acb42959c445b044778399334c Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 5 Mar 2012 10:33:56 +0800 Subject: [PATCH 1/8] mod: clear pan_by_page if not in two column mode --- unireader.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/unireader.lua b/unireader.lua index 812732785..d3525564c 100644 --- a/unireader.lua +++ b/unireader.lua @@ -197,17 +197,21 @@ function UniReader:setzoom(page) self.offset_x = (width - (self.globalzoom * pwidth)) / 2 self.offset_y = 0 end + self.pan_by_page = false elseif self.globalzoommode == self.ZOOM_FIT_TO_PAGE_WIDTH or self.globalzoommode == self.ZOOM_FIT_TO_CONTENT_WIDTH then self.globalzoom = width / pwidth self.offset_x = 0 self.offset_y = (height - (self.globalzoom * pheight)) / 2 + self.pan_by_page = false elseif self.globalzoommode == self.ZOOM_FIT_TO_PAGE_HEIGHT or self.globalzoommode == self.ZOOM_FIT_TO_CONTENT_HEIGHT then self.globalzoom = height / pheight self.offset_x = (width - (self.globalzoom * pwidth)) / 2 self.offset_y = 0 + self.pan_by_page = false end + if self.globalzoommode == self.ZOOM_FIT_TO_CONTENT then if (x1 - x0) < pwidth then self.globalzoom = width / (x1 - x0) From 51dd8472b942ab4a031f50e406eb8b2fa75a3a65 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 5 Mar 2012 10:37:29 +0800 Subject: [PATCH 2/8] mod: bug fix in zooming update self.global_orig after dc:setZoom --- unireader.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/unireader.lua b/unireader.lua index d3525564c..2ff4b3b30 100644 --- a/unireader.lua +++ b/unireader.lua @@ -247,7 +247,10 @@ function UniReader:setzoom(page) self.pan_y = self.offset_y self.pan_by_page = true end + dc:setZoom(self.globalzoom) + self.globalzoom_orig = self.globalzoom + dc:setRotate(self.globalrotate); dc:setOffset(self.offset_x, self.offset_y) self.fullwidth, self.fullheight = page:getSize(dc) From ab2cd3ec8cf7a022751b470d82cd3345be9c94bd Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 5 Mar 2012 10:48:03 +0800 Subject: [PATCH 3/8] mod: save jump_stack after exit --- reader.lua | 1 - unireader.lua | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/reader.lua b/reader.lua index e8adcae54..5ad66dcdd 100755 --- a/reader.lua +++ b/reader.lua @@ -35,7 +35,6 @@ longopts = { function openFile(filename) local file_type = string.lower(string.match(filename, ".+%.(.+)")) if file_type == "djvu" then - print "haha" if DJVUReader:open(filename) then page_num = DJVUReader.settings:readsetting("last_page") or 1 DJVUReader:goto(tonumber(page_num)) diff --git a/unireader.lua b/unireader.lua index 2ff4b3b30..bbd0db7e1 100644 --- a/unireader.lua +++ b/unireader.lua @@ -98,10 +98,15 @@ end function UniReader:loadSettings(filename) if self.doc ~= nil then self.settings = DocSettings:open(filename) + local gamma = self.settings:readsetting("gamma") if gamma then self.globalgamma = gamma end + + local jumpstack = self.settings:readsetting("jumpstack") + self.jump_stack = jumpstack or {} + return true end return false @@ -594,6 +599,7 @@ function UniReader:inputloop() if self.settings ~= nil then self.settings:savesetting("last_page", self.pageno) self.settings:savesetting("gamma", self.globalgamma) + self.settings:savesetting("jumpstack", self.jump_stack) self.settings:close() end From ca3a712521708464c8d87f5bf03cb2d9cc547f62 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 5 Mar 2012 11:25:51 +0800 Subject: [PATCH 4/8] fix: bug in jump stack * remove page to jump from the stack --- unireader.lua | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/unireader.lua b/unireader.lua index bbd0db7e1..732430265 100644 --- a/unireader.lua +++ b/unireader.lua @@ -299,46 +299,60 @@ function UniReader:show(no) self.slot_visible = slot; end +--[[ + @ pageno is the page you want to add to jump_stack +--]] function UniReader:add_jump(pageno) local jump_item = nil - -- add current page to jump_stack if no in + -- move pageno page to jump_stack to jump_stack top if already in for _t,_v in ipairs(self.jump_stack) do if _v.page == pageno then jump_item = _v table.remove(self.jump_stack, _t) - elseif _v.page == no then - -- the page we jumped to should not be show in stack - table.remove(self.jump_stack, _t) + break end end - -- create a new one if not found + -- create a new one if page not found in stack if not jump_item then jump_item = { page = pageno, datetime = os.date("%Y-%m-%d %H:%M:%S"), } end - -- insert at the start + + -- insert item at the start table.insert(self.jump_stack, 1, jump_item) + if #self.jump_stack > 10 then -- remove the last element to keep the size less than 10 table.remove(self.jump_stack) end end +function UniReader:del_jump(pageno) + for _t,_v in ipairs(self.jump_stack) do + if _v.page == pageno then + table.remove(self.jump_stack, _t) + end + end +end + -- change current page and cache next page after rendering function UniReader:goto(no) if no < 1 or no > self.doc:getPages() then return end - -- for jump_stack + -- for jump_stack, distinguish jump from normal page turn if self.pageno and math.abs(self.pageno - no) > 1 then + -- the page we jumped to should not be shown in stack, remove it + self:del_jump(no) self:add_jump(self.pageno) end self.pageno = no self:show(no) + if no < self.doc:getPages() then if self.globalzoommode ~= self.ZOOM_BY_VALUE then -- pre-cache next page From 989e915c8f8c104242e3007ca89ddfb8d9daa843 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 5 Mar 2012 13:15:34 +0800 Subject: [PATCH 5/8] mod: add notes in jumpstack NOTE that the jumpstack maintaining strategy has been changed in this commit compared to commit #15 and #31. Now current viewing page in kept in the stack to preserve the notes. --- unireader.lua | 55 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/unireader.lua b/unireader.lua index 732430265..4852dbfbd 100644 --- a/unireader.lua +++ b/unireader.lua @@ -63,6 +63,7 @@ UniReader = { cache_current_memsize = 0, cache = {}, jump_stack = {}, + toc = nil, } function UniReader:new(o) @@ -302,13 +303,28 @@ end --[[ @ pageno is the page you want to add to jump_stack --]] -function UniReader:add_jump(pageno) +function UniReader:add_jump(pageno, notes) local jump_item = nil - -- move pageno page to jump_stack to jump_stack top if already in + local notes_to_add = notes + if not notes_to_add then + -- no notes given, auto generate from TOC entry + notes_to_add = self:getTOCTitleByPage(self.pageno) + if notes_to_add ~= "" then + notes_to_add = "in "..notes_to_add + end + end + -- move pageno page to jump_stack top if already in for _t,_v in ipairs(self.jump_stack) do if _v.page == pageno then jump_item = _v table.remove(self.jump_stack, _t) + -- if original notes is not empty, probably defined by users, + -- we use the original notes to overwrite auto generated notes + -- from TOC entry + if jump_item.notes ~= "" then + notes_to_add = jump_item.notes + end + jump_item.notes = notes or notes_to_add break end end @@ -317,6 +333,7 @@ function UniReader:add_jump(pageno) jump_item = { page = pageno, datetime = os.date("%Y-%m-%d %H:%M:%S"), + notes = notes_to_add, } end @@ -345,8 +362,6 @@ function UniReader:goto(no) -- for jump_stack, distinguish jump from normal page turn if self.pageno and math.abs(self.pageno - no) > 1 then - -- the page we jumped to should not be shown in stack, remove it - self:del_jump(no) self:add_jump(self.pageno) end @@ -392,11 +407,33 @@ function UniReader:setrotate(rotate) self:goto(self.pageno) end +function UniReader:fillTOC() + self.toc = self.doc:getTOC() +end + +function UniReader:getTOCTitleByPage(pageno) + if not self.toc then + -- build toc when needed. + self:fillTOC() + end + + for _k,_v in ipairs(self.toc) do + if _v.page >= pageno then + --@TODO clean up special characters in title 05.03 2012 + return _v.title + end + end + return "" +end + function UniReader:showTOC() - toc = self.doc:getTOC() + if not self.toc then + -- build toc when needed. + self:fillTOC() + end local menu_items = {} -- build menu items - for _k,_v in ipairs(toc) do + for _k,_v in ipairs(self.toc) do table.insert(menu_items, (" "):rep(_v.depth-1).._v.title) end @@ -407,7 +444,7 @@ function UniReader:showTOC() } item_no = toc_menu:choose(0, fb.bb:getHeight()) if item_no then - self:goto(toc[item_no].page) + self:goto(self.toc[item_no].page) else self:goto(self.pageno) end @@ -417,7 +454,7 @@ function UniReader:showJumpStack() local menu_items = {} for _k,_v in ipairs(self.jump_stack) do table.insert(menu_items, - _v.datetime.." -> Page ".._v.page) + _v.datetime.." -> Page ".._v.page.." ".._v.notes) end jump_menu = SelectMenu:new{ menu_title = "Jump Keeper (current page: "..self.pageno..")", @@ -606,7 +643,9 @@ function UniReader:inputloop() end end + -- do clean up stuff self:clearcache() + self.toc = nil if self.doc ~= nil then self.doc:close() end From 7a2ff94bee1300a55ec91f5a375de86b52e491ac Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 5 Mar 2012 13:38:51 +0800 Subject: [PATCH 6/8] mod: add entries in gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 100e46616..569cf0848 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,9 @@ lua-* lsqlite3* sqlite-amalgamation* mupdf/ +djvulibre/ luafilesystem/ +.reader.kpdfview.lua kpdfview From f50e8d695c46888d678a81a2643a812441ce18b2 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 5 Mar 2012 13:43:23 +0800 Subject: [PATCH 7/8] mod: add UniReader:cleanUpTOCTitle() re-apply the changes introduced by HW in commit: 3c56f50cae98edb18d3ea8580dd9bb2fd715f658 I mistakenly overwrote it when merging from djvu branch. :( Since the title needs to be cleaned in two places, I turn it into a method. --- unireader.lua | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/unireader.lua b/unireader.lua index 4852dbfbd..eb936d131 100644 --- a/unireader.lua +++ b/unireader.lua @@ -407,6 +407,10 @@ function UniReader:setrotate(rotate) self:goto(self.pageno) end +function UniReader:cleanUpTOCTitle(title) + return title:gsub("\13", "") +end + function UniReader:fillTOC() self.toc = self.doc:getTOC() end @@ -419,8 +423,7 @@ function UniReader:getTOCTitleByPage(pageno) for _k,_v in ipairs(self.toc) do if _v.page >= pageno then - --@TODO clean up special characters in title 05.03 2012 - return _v.title + return self:cleanUpTOCTitle(_v.title) end end return "" @@ -435,7 +438,7 @@ function UniReader:showTOC() -- build menu items for _k,_v in ipairs(self.toc) do table.insert(menu_items, - (" "):rep(_v.depth-1).._v.title) + (" "):rep(_v.depth-1)..self:cleanUpTOCTitle(_v.title)) end toc_menu = SelectMenu:new{ menu_title = "Table of Contents", From 2505128128f13ec7243d046e49dde4115b3c461c Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Mon, 5 Mar 2012 14:42:46 +0800 Subject: [PATCH 8/8] fix: add -lpthread for kpdfview target --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 939df0afe..a058d8fbe 100644 --- a/Makefile +++ b/Makefile @@ -60,7 +60,7 @@ THIRDPARTYLIBS := $(MUPDFLIBDIR)/libfreetype.a \ LUALIB := $(LUADIR)/src/liblua.a kpdfview: kpdfview.o einkfb.o pdf.o blitbuffer.o input.o util.o ft.o lfs.o $(MUPDFLIBS) $(THIRDPARTYLIBS) $(LUALIB) $(DJVULIBS) djvu.o - $(CC) -lm -ldl $(EMU_LDFLAGS) -lstdc++ \ + $(CC) -lm -ldl -lpthread $(EMU_LDFLAGS) -lstdc++ \ kpdfview.o \ einkfb.o \ pdf.o \