From e282179793690ba8d66643889e1d75b9d83b25a2 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Thu, 19 Apr 2012 09:49:46 +0800 Subject: [PATCH 1/8] fix bug in addJump and addBookmark Pointed out by kljohann, thanks. Now addJump and addBookmark get notes from specified pageno/xpointer instead of current page. * also fixed bug in page number counting in cre.cpp --- cre.cpp | 12 ++++-------- crereader.lua | 11 +++++++++++ filechooser.lua | 2 +- unireader.lua | 10 ++++++++-- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/cre.cpp b/cre.cpp index e3b9243e0..6cb9dd49d 100644 --- a/cre.cpp +++ b/cre.cpp @@ -108,10 +108,10 @@ static int getPageFromXPointer(lua_State *L) { CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument"); const char *xpointer_str = luaL_checkstring(L, 2); - int page = 0; + int page = 1; ldomXPointer xp = doc->dom_doc->createXPointer(lString16(xpointer_str)); - page = doc->text_view->getBookmarkPage(xp); + page = doc->text_view->getBookmarkPage(xp) + 1; lua_pushinteger(L, page); return 1; @@ -180,7 +180,7 @@ static int walkTableOfContent(lua_State *L, LVTocItem *toc, int *count) { /* set subtable, Toc entry */ lua_newtable(L); lua_pushstring(L, "page"); - lua_pushnumber(L, toc_tmp->getPercent()); + lua_pushnumber(L, toc_tmp->getPage()+1); lua_settable(L, -3); lua_pushstring(L, "xpointer"); @@ -225,10 +225,6 @@ static int walkTableOfContent(lua_State *L, LVTocItem *toc, int *count) { * }, * } * - * Warnning: not like pdf or djvu support, page here refers to the - * percent of height within the document, not the real page number. - * We use page here just to keep consistent with other readers. - * */ static int getTableOfContent(lua_State *L) { CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument"); @@ -281,7 +277,7 @@ static int gotoPage(lua_State *L) { CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument"); int pageno = luaL_checkint(L, 2); - doc->text_view->goToPage(pageno); + doc->text_view->goToPage(pageno-1); return 0; } diff --git a/crereader.lua b/crereader.lua index e53639504..528420ce5 100644 --- a/crereader.lua +++ b/crereader.lua @@ -244,6 +244,17 @@ end ---------------------------------------------------- -- TOC related methods ---------------------------------------------------- +function CREReader:getTocTitleByPage(page_or_xpoint) + local page = 1 + -- tranform xpointer to page + if type(page_or_xpoint) == "string" then + page = self.doc:getPageFromXPointer(page_or_xpoint) + else + page = page_or_xpoint + end + return self:_getTocTitleByPage(page) +end + function CREReader:getTocTitleOfCurrentPage() return self:getTocTitleByPage(self.percent) end diff --git a/filechooser.lua b/filechooser.lua index 15c2a412e..1bfd7a7d1 100644 --- a/filechooser.lua +++ b/filechooser.lua @@ -191,7 +191,7 @@ function FileChooser:choose(ypos, height) --[[ This might looks a little bit dirty for using callback. But I cannot come up with a better solution for renewing - the height arguemtn according to screen rotation mode. + the height argument according to screen rotation mode. The callback might also be useful for calling system settings menu in the future. diff --git a/unireader.lua b/unireader.lua index 5985c2be6..f331b084c 100644 --- a/unireader.lua +++ b/unireader.lua @@ -1339,7 +1339,7 @@ end --]] function UniReader:addJump(pageno) -- build notes from TOC - local notes = self:getTocTitleOfCurrentPage() + local notes = self:getTocTitleByPage(pageno) if notes ~= "" then notes = "in "..notes end @@ -1387,7 +1387,7 @@ function UniReader:addBookmark(pageno) end end -- build notes from TOC - local notes = self:getTocTitleOfCurrentPage() + local notes = self:getTocTitleByPage(pageno) if notes ~= "" then notes = "in "..notes end @@ -1531,7 +1531,13 @@ function UniReader:fillToc() self.toc = self.doc:getToc() end +-- getTocTitleByPage wrapper, so specific reader +-- can tranform pageno according its need function UniReader:getTocTitleByPage(pageno) + return self:_getTocTitleByPage(pageno) +end + +function UniReader:_getTocTitleByPage(pageno) if not self.toc then -- build toc when needed. self:fillToc() From 69cea4f2af03c5c6e4dfd0c2062e86026d6733ef Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Thu, 19 Apr 2012 10:23:39 +0800 Subject: [PATCH 2/8] fix in CREReader:getTocTitleOfCurrentPage pass xpointer instead of percent --- crereader.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crereader.lua b/crereader.lua index 528420ce5..6344b92ab 100644 --- a/crereader.lua +++ b/crereader.lua @@ -256,7 +256,7 @@ function CREReader:getTocTitleByPage(page_or_xpoint) end function CREReader:getTocTitleOfCurrentPage() - return self:getTocTitleByPage(self.percent) + return self:getTocTitleByPage(self.doc:getXPointer()) end From c46266fee8bb887baac4e5bc43ac319b02f61701 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Thu, 19 Apr 2012 10:31:38 +0800 Subject: [PATCH 3/8] fix comment in crereader --- crereader.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crereader.lua b/crereader.lua index 6344b92ab..4a8b8c6df 100644 --- a/crereader.lua +++ b/crereader.lua @@ -108,7 +108,7 @@ function CREReader:goto(pos, is_ignore_jump, pos_type) if pos_type == "xpointer" then self.doc:gotoXPointer(pos) pos = self.doc:getCurrentPos() - else -- pos_type is PERCENT * 100 + else -- pos_type is position within document pos = math.min(pos, self.doc:getFullHeight() - height) pos = math.max(pos, 0) self.doc:gotoPos(pos) From c4bd2a1046f8a89898778d50bc5d690d69237c7e Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Thu, 19 Apr 2012 11:05:48 +0800 Subject: [PATCH 4/8] add debug argument to reader.lua Without -d argument, all the debug message will be suppressed. --- reader.lua | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/reader.lua b/reader.lua index 646cc8b35..474d3c24c 100755 --- a/reader.lua +++ b/reader.lua @@ -33,7 +33,7 @@ longopts = { password = "p", goto = "g", gamma = "G", - device = "d", + debug = "d", help = "h" } @@ -71,6 +71,7 @@ function showusage() print("-p, --password=PASSWORD set password for reading PDF document") print("-g, --goto=page start reading on page") print("-G, --gamma=GAMMA set gamma correction") + print("-d, --debug start in debug mode") print(" (floating point notation, e.g. \"1.5\")") print("-h, --help show this usage help") print("") @@ -84,11 +85,19 @@ function showusage() return end -optarg, optind = alt_getopt.get_opts(ARGV, "p:G:hg:d:", longopts) +optarg, optind = alt_getopt.get_opts(ARGV, "p:g:G:hg:dg:", longopts) if optarg["h"] then return showusage() end +if not optarg["d"] then + debug = function() end +end + +if optarg["G"] ~= nil then + globalgamma = optarg["G"] +end + if util.isEmulated()==1 then input.open("") -- SDL key codes @@ -107,10 +116,6 @@ else end end -if optarg["G"] ~= nil then - globalgamma = optarg["G"] -end - fb = einkfb.open("/dev/fb0") G_width, G_height = fb:getSize() -- read current rotation mode From ca55b3975693db2290cbd315cc97a0b9c5b3c04a Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Thu, 19 Apr 2012 13:57:30 +0800 Subject: [PATCH 5/8] fix turn to previous page with KEY_LPGBCK --- unireader.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unireader.lua b/unireader.lua index f331b084c..08420f478 100644 --- a/unireader.lua +++ b/unireader.lua @@ -1799,7 +1799,7 @@ function UniReader:addAllCommands() "previous/next page", function(unireader,keydef) unireader:goto( - (keydef.keycode == KEY_PGBCK or Keydef.keycode == KEY_LPGBCK) + (keydef.keycode == KEY_PGBCK or keydef.keycode == KEY_LPGBCK) and unireader:prevView() or unireader:nextView()) end) self.commands:addGroup(MOD_ALT.."< >",{Keydef:new(KEY_PGBCK,MOD_ALT),Keydef:new(KEY_PGFWD,MOD_ALT)}, From 9144cabc76f8935c8c71bd7cec0c9a1f0233e17e Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Thu, 19 Apr 2012 14:10:37 +0800 Subject: [PATCH 6/8] fix bug in partial refresh count --- unireader.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unireader.lua b/unireader.lua index 08420f478..fa48df0f8 100644 --- a/unireader.lua +++ b/unireader.lua @@ -1318,7 +1318,7 @@ function UniReader:show(no) if self.rcount >= self.rcountmax then debug("full refresh") - self.rcount = 1 + self.rcount = 0 fb:refresh(0) else debug("partial refresh") @@ -1984,7 +1984,7 @@ function UniReader:addAllCommands() fb:refresh(1) fb.bb:invertRect(0, 0, 1, 1) fb:refresh(0) - unireader.rcount = 1 + unireader.rcount = 0 end) self.commands:add(KEY_Z,nil,"Z", "set crop mode", From bc299784caacc964e0e10b20f97eef88d0266320 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Thu, 19 Apr 2012 14:14:08 +0800 Subject: [PATCH 7/8] fix bug in partial screen refresh count in crereader --- crereader.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crereader.lua b/crereader.lua index 4a8b8c6df..ccf567669 100644 --- a/crereader.lua +++ b/crereader.lua @@ -134,9 +134,9 @@ function CREReader:goto(pos, is_ignore_jump, pos_type) end self.show_overlap = 0 - if self.rcount == self.rcountmax then + if self.rcount >= self.rcountmax then debug("full refresh") - self.rcount = 1 + self.rcount = 0 fb:refresh(0) else debug("partial refresh") From b03d589ae91f0c8cbfbf1f4e36d958c999e0d380 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Thu, 19 Apr 2012 14:39:50 +0800 Subject: [PATCH 8/8] add preLoadSettings methods for cache_document_size setting cache_document_size should be configurable for every docuemnt and it must be loaded before document open, so I added the preLoadSettings method --- reader.lua | 1 + unireader.lua | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/reader.lua b/reader.lua index 474d3c24c..73bf2ba41 100755 --- a/reader.lua +++ b/reader.lua @@ -49,6 +49,7 @@ function openFile(filename) end if reader then InfoMessage:show("Opening document, please wait... ", 0) + reader:preLoadSettings(filename) local ok, err = reader:open(filename) if ok then reader:loadSettings(filename) diff --git a/unireader.lua b/unireader.lua index fa48df0f8..4aa7dd0dd 100644 --- a/unireader.lua +++ b/unireader.lua @@ -907,11 +907,19 @@ function UniReader:initGlobalSettings(settings) end end +-- Method to load settings before document open +function UniReader:preLoadSettings(filename) + self.settings = DocSettings:open(filename) + + local cache_d_size = self.settings:readSetting("cache_document_size") + if cache_d_size then + self.cache_document_size = cache_d_size + end +end + -- This is a low-level method that can be shared with all readers. function UniReader:loadSettings(filename) if self.doc ~= nil then - self.settings = DocSettings:open(filename,self.cache_document_size) - local gamma = self.settings:readSetting("gamma") if gamma then self.globalgamma = gamma