Files
koreader/djvureader.lua
Qingping Hou e7f0a8bddb mod: rewrite highlight feature
waiting for integrate test with cursor support
2012-03-19 11:05:23 +08:00

78 lines
1.7 KiB
Lua

require "unireader"
DJVUReader = UniReader:new{
newDC = function()
print("djvu.newDC")
return djvu.newDC()
end,
}
function DJVUReader:init()
self.nulldc = self.newDC()
end
-- open a DJVU file and its settings store
-- DJVU does not support password yet
function DJVUReader:open(filename)
self.doc = djvu.openDocument(filename)
return self:loadSettings(filename)
end
function DJVUReader:_isWordInScreenRange(w)
return (self.cur_full_height-(w.y0*self.globalzoom) <=
-self.offset_y + width) and
(self.cur_full_height-(w.y1*self.globalzoom) >=
-self.offset_y)
end
function DJVUReader:_genTextIter(text, l0, w0, l1, w1)
local word_items = {}
local count = 0
local l = l0
local w = w0
local tmp_w1 = 0
-- build item table
while l <= l1 do
local words = text[l].words
if l == l1 then
tmp_w1 = w1
else
tmp_w1 = #words
end
while w <= tmp_w1 do
if self:_isWordInScreenRange(words[w]) then
table.insert(word_items, words[w])
end -- EOF if isInScreenRange
w = w + 1
end -- EOF while words
-- goto next line, reset j
w = 1
l = l + 1
end -- EOF for while
return function() count = count + 1 return word_items[count] end
end
function DJVUReader:_drawTextHighLight(text_iter)
for i in text_iter do
fb.bb:paintRect(
i.x0*self.globalzoom,
self.offset_y+self.cur_full_height-(i.y1*self.globalzoom),
(i.x1-i.x0)*self.globalzoom,
(i.y1-i.y0)*self.globalzoom, 15)
end -- EOF for
end
function DJVUReader:startHighLightMode()
local t = self.doc:getPageText(self.pageno)
--self:_drawTextHighLight(self:_genTextIter(t, 1, 1, #t, #(t[#t].words)))
-- highlight the first line
self:_drawTextHighLight(self:_genTextIter(t, 1, 1, 1, #(t[1].words)))
fb:refresh(0)
end