Merge pull request #126 from houqp/master

some bugfixes
This commit is contained in:
HW
2012-04-19 05:15:15 -07:00
5 changed files with 53 additions and 26 deletions

12
cre.cpp
View File

@@ -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;
}

View File

@@ -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)
@@ -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")
@@ -244,8 +244,19 @@ 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)
return self:getTocTitleByPage(self.doc:getXPointer())
end

View File

@@ -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.

View File

@@ -33,7 +33,7 @@ longopts = {
password = "p",
goto = "g",
gamma = "G",
device = "d",
debug = "d",
help = "h"
}
@@ -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)
@@ -71,6 +72,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 +86,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 +117,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

View File

@@ -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
@@ -1318,7 +1326,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")
@@ -1339,7 +1347,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 +1395,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 +1539,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()
@@ -1793,7 +1807,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)},
@@ -1978,7 +1992,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",