diff --git a/Makefile b/Makefile index c8c34b15a..9c218500a 100644 --- a/Makefile +++ b/Makefile @@ -154,9 +154,9 @@ clean: -rm -f *.o kpdfview slider_watcher cleanthirdparty: - make -C $(LUADIR) clean - make -C $(MUPDFDIR) clean - #make -C $(CRENGINEDIR)/thirdparty/antiword clean + -make -C $(LUADIR) clean + -make -C $(MUPDFDIR) clean + -make -C $(CRENGINEDIR)/thirdparty/antiword clean test -d $(CRENGINEDIR)/thirdparty/chmlib && make -C $(CRENGINEDIR)/thirdparty/chmlib clean || echo warn: chmlib folder not found test -d $(CRENGINEDIR)/thirdparty/libpng && (make -C $(CRENGINEDIR)/thirdparty/libpng clean) || echo warn: chmlib folder not found test -d $(CRENGINEDIR)/crengine && (make -C $(CRENGINEDIR)/crengine clean) || echo warn: chmlib folder not found diff --git a/cre.cpp b/cre.cpp index 7caae1caa..7a2e09503 100644 --- a/cre.cpp +++ b/cre.cpp @@ -117,6 +117,22 @@ static int getPageFromXPointer(lua_State *L) { return 1; } +static int getPosFromXPointer(lua_State *L) { + CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument"); + const char *xpointer_str = luaL_checkstring(L, 2); + + int pos = 0; + ldomXPointer xp = doc->dom_doc->createXPointer(lString16(xpointer_str)); + + lvPoint pt = xp.toPoint(); + if (pt.y > 0) { + pos = pt.y; + } + lua_pushinteger(L, pos); + + return 1; +} + static int getCurrentPos(lua_State *L) { CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument"); @@ -125,21 +141,6 @@ static int getCurrentPos(lua_State *L) { return 1; } -//static int getPosFromXPointer(lua_State *L) { - //CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument"); - //const char *xpointer_str = luaL_checkstring(L, 2); - - //lvRect rc; - //int pos; - - //ldomXPointer *xp = NULL; - //xp = doc->dom_doc->createXPointer(lString16(xpointer_str)); - //getCursorDocRect(*xp, rc); - //pos = - - //return 1; -//} - static int getCurrentPercent(lua_State *L) { CreDocument *doc = (CreDocument*) luaL_checkudata(L, 1, "credocument"); @@ -437,6 +438,7 @@ static const struct luaL_Reg credocument_meth[] = { {"getPages", getNumberOfPages}, {"getCurrentPage", getCurrentPage}, {"getPageFromXPointer", getPageFromXPointer}, + {"getPosFromXPointer", getPosFromXPointer}, {"getCurrentPos", getCurrentPos}, {"getCurrentPercent", getCurrentPercent}, {"getXPointer", getXPointer}, diff --git a/crereader.lua b/crereader.lua index 9f48b7c9e..213997dc4 100644 --- a/crereader.lua +++ b/crereader.lua @@ -271,6 +271,32 @@ end ---------------------------------------------------- -- bookmarks related methods ---------------------------------------------------- +function CREReader:isBookmarkInSequence(a, b) + return self.doc:getPosFromXPointer(a.page) < self.doc:getPosFromXPointer(b.page) +end + +function CREReader:nextBookMarkedPage() + for k,v in ipairs(self.bookmarks) do + if self.pos < self.doc:getPosFromXPointer(v.page) then + return v + end + end + return nil +end + +function CREReader:prevBookMarkedPage() + local pre_item = nil + for k,v in ipairs(self.bookmarks) do + if self.pos <= self.doc:getPosFromXPointer(v) then + if self.doc:getPosFromXPointer(pre_item) < self.pos then + return pre_item + end + end + pre_item = v + end + return nil +end + function CREReader:showBookMarks() local menu_items = {} -- build menu items diff --git a/kpvcrlib/crengine b/kpvcrlib/crengine index 998821344..b62d054cc 160000 --- a/kpvcrlib/crengine +++ b/kpvcrlib/crengine @@ -1 +1 @@ -Subproject commit 99882134490b47ebb28107cebfbeb8eafb070f54 +Subproject commit b62d054cca57366bc1ba2fa249c5bbf5c5234346 diff --git a/unireader.lua b/unireader.lua index feb39f167..f730ab3e4 100644 --- a/unireader.lua +++ b/unireader.lua @@ -1447,6 +1447,10 @@ function UniReader:delJump(pageno) end end +function UniReader:isBookmarkInSequence(a, b) + return a.page < b.page +end + -- return nil if page already marked -- otherwise, return true function UniReader:addBookmark(pageno) @@ -1466,6 +1470,9 @@ function UniReader:addBookmark(pageno) notes = notes, } table.insert(self.bookmarks, mark_item) + table.sort(self.bookmarks, function(a,b) + return self:isBookmarkInSequence(a, b) + end) return true end @@ -1730,6 +1737,28 @@ function UniReader:showBookMarks() end end +function UniReader:nextBookMarkedPage() + for k,v in ipairs(self.bookmarks) do + if self.pageno < v.page then + return v + end + end + return nil +end + +function UniReader:prevBookMarkedPage() + local pre_item = nil + for k,v in ipairs(self.bookmarks) do + if self.pageno <= v.page then + if pre_item.page < self.pageno then + return pre_item + end + end + pre_item = v + end + return nil +end + function UniReader:showHighLight() local menu_items = {} local highlight_dict = {}