mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Merge pull request #377 from chrox/master
fix looking up wrong word in reflowed page
This commit is contained in:
5
Makefile
5
Makefile
@@ -24,7 +24,7 @@ XGETTEXT_BIN=$(KOREADER_MISC_TOOL)/gettext/lua_xgettext.py
|
||||
MO_DIR=$(INSTALL_DIR)/koreader/i18n
|
||||
|
||||
|
||||
all: $(KOR_BASE)/$(OUTPUT_DIR)/luajit mo
|
||||
all: $(KOR_BASE)/$(OUTPUT_DIR)/luajit po mo
|
||||
$(MAKE) -C $(KOR_BASE)
|
||||
echo $(VERSION) > git-rev
|
||||
mkdir -p $(INSTALL_DIR)/koreader
|
||||
@@ -94,6 +94,9 @@ pot:
|
||||
$(XGETTEXT_BIN) reader.lua `find frontend -iname "*.lua"` \
|
||||
> $(TEMPLATE_DIR)/$(DOMAIN).pot
|
||||
|
||||
po:
|
||||
$(MAKE) -i -C l10n bootstrap update
|
||||
|
||||
mo:
|
||||
for po in `find l10n -iname '*.po'`; do \
|
||||
resource=`basename $$po .po` ; \
|
||||
|
||||
@@ -665,20 +665,40 @@ function KoptInterface:getWordFromPosition(doc, pos)
|
||||
end
|
||||
end
|
||||
|
||||
local function getBoxRelativePosition(s_box, l_box)
|
||||
local pos_rel = {}
|
||||
local s_box_center = s_box:center()
|
||||
pos_rel.x = (s_box_center.x - l_box.x)/l_box.w
|
||||
pos_rel.y = (s_box_center.y - l_box.y)/l_box.h
|
||||
return pos_rel
|
||||
end
|
||||
|
||||
--[[
|
||||
get word and word box from position in reflowed page
|
||||
]]--
|
||||
function KoptInterface:getWordFromReflowPosition(doc, boxes, pos)
|
||||
local pageno = pos.page
|
||||
local reflowed_page_boxes = self:getReflowedTextBoxesFromScratch(doc, pageno)
|
||||
|
||||
local scratch_reflowed_page_boxes = self:getReflowedTextBoxesFromScratch(doc, pageno)
|
||||
local scratch_reflowed_word_box = self:getWordFromBoxes(scratch_reflowed_page_boxes, pos)
|
||||
--DEBUG("word box from scratch", scratch_reflowed_word_box)
|
||||
|
||||
local reflowed_page_boxes = self:getReflowedTextBoxes(doc, pageno)
|
||||
local reflowed_word_box = self:getWordFromBoxes(reflowed_page_boxes, pos)
|
||||
local reflowed_pos = reflowed_word_box.box:center()
|
||||
local native_pos = self:reflowToNativePosTransform(doc, pageno, reflowed_pos)
|
||||
--DEBUG("word box from reflow", reflowed_word_box)
|
||||
|
||||
local reflowed_pos_abs = scratch_reflowed_word_box.box:center()
|
||||
local reflowed_pos_rel = getBoxRelativePosition(scratch_reflowed_word_box.box, reflowed_word_box.box)
|
||||
--DEBUG("word box absolote center", reflowed_pos_abs)
|
||||
--DEBUG("word box relative center", reflowed_pos_rel)
|
||||
|
||||
local native_pos = self:reflowToNativePosTransform(doc, pageno, reflowed_pos_abs, reflowed_pos_rel)
|
||||
local native_word_box = self:getWordFromBoxes(boxes, native_pos)
|
||||
|
||||
local word_box = {
|
||||
word = native_word_box.word,
|
||||
pbox = native_word_box.box, -- box on page
|
||||
sbox = reflowed_word_box.box, -- box on screen
|
||||
sbox = scratch_reflowed_word_box.box, -- box on screen
|
||||
pos = native_pos,
|
||||
}
|
||||
return word_box
|
||||
@@ -716,7 +736,7 @@ end
|
||||
--[[
|
||||
transform position in reflowed page to native page
|
||||
]]--
|
||||
function KoptInterface:reflowToNativePosTransform(doc, pageno, pos)
|
||||
function KoptInterface:reflowToNativePosTransform(doc, pageno, abs_pos, rel_pos)
|
||||
local bbox = doc:getPageBBox(pageno)
|
||||
local context_hash = self:getContextHash(doc, pageno, bbox)
|
||||
local kctx_hash = "kctx|"..context_hash
|
||||
@@ -725,7 +745,7 @@ function KoptInterface:reflowToNativePosTransform(doc, pageno, pos)
|
||||
--kc:setDebug()
|
||||
--DEBUG("transform reflowed pos", pos)
|
||||
local npos = {}
|
||||
npos.x, npos.y = kc:reflowToNativePosTransform(pos.x, pos.y)
|
||||
npos.x, npos.y = kc:reflowToNativePosTransform(abs_pos.x, abs_pos.y, rel_pos.x, rel_pos.y)
|
||||
--DEBUG("transformed native pos", npos)
|
||||
return npos
|
||||
end
|
||||
@@ -749,17 +769,25 @@ get text and text boxes from screen positions for reflowed page
|
||||
]]--
|
||||
function KoptInterface:getTextFromReflowPositions(doc, native_boxes, pos0, pos1)
|
||||
local pageno = pos0.page
|
||||
local reflowed_page_boxes = self:getReflowedTextBoxesFromScratch(doc, pageno)
|
||||
local reflowed_box0 = self:getWordFromBoxes(reflowed_page_boxes, pos0)
|
||||
local reflowed_pos0 = reflowed_box0.box:center()
|
||||
local native_pos0 = self:reflowToNativePosTransform(doc, pageno, reflowed_pos0)
|
||||
|
||||
local reflowed_box1 = self:getWordFromBoxes(reflowed_page_boxes, pos1)
|
||||
local reflowed_pos1 = reflowed_box1.box:center()
|
||||
local native_pos1 = self:reflowToNativePosTransform(doc, pageno, reflowed_pos1)
|
||||
local scratch_reflowed_page_boxes = self:getReflowedTextBoxesFromScratch(doc, pageno)
|
||||
local reflowed_page_boxes = self:getReflowedTextBoxes(doc, pageno)
|
||||
|
||||
local scratch_reflowed_word_box0 = self:getWordFromBoxes(scratch_reflowed_page_boxes, pos0)
|
||||
local reflowed_word_box0 = self:getWordFromBoxes(reflowed_page_boxes, pos0)
|
||||
local scratch_reflowed_word_box1 = self:getWordFromBoxes(scratch_reflowed_page_boxes, pos1)
|
||||
local reflowed_word_box1 = self:getWordFromBoxes(reflowed_page_boxes, pos1)
|
||||
|
||||
local reflowed_pos_abs0 = scratch_reflowed_word_box0.box:center()
|
||||
local reflowed_pos_rel0 = getBoxRelativePosition(scratch_reflowed_word_box0.box, reflowed_word_box0.box)
|
||||
local reflowed_pos_abs1 = scratch_reflowed_word_box1.box:center()
|
||||
local reflowed_pos_rel1 = getBoxRelativePosition(scratch_reflowed_word_box1.box, reflowed_word_box1.box)
|
||||
|
||||
local native_pos0 = self:reflowToNativePosTransform(doc, pageno, reflowed_pos_abs0, reflowed_pos_rel0)
|
||||
local native_pos1 = self:reflowToNativePosTransform(doc, pageno, reflowed_pos_abs1, reflowed_pos_rel1)
|
||||
|
||||
local reflowed_text_boxes = self:getTextFromBoxes(reflowed_page_boxes, pos0, pos1)
|
||||
local native_text_boxes = self:getTextFromBoxes(native_boxes, pos0, pos1)
|
||||
local native_text_boxes = self:getTextFromBoxes(native_boxes, native_pos0, native_pos1)
|
||||
local text_boxes = {
|
||||
text = native_text_boxes.text,
|
||||
pboxes = native_text_boxes.boxes, -- boxes on page
|
||||
@@ -776,7 +804,7 @@ get text and text boxes from screen positions for native page
|
||||
function KoptInterface:getTextFromNativePositions(doc, native_boxes, pos0, pos1)
|
||||
local native_text_boxes = self:getTextFromBoxes(native_boxes, pos0, pos1)
|
||||
local text_boxes = {
|
||||
word = native_text_boxes.text,
|
||||
text = native_text_boxes.text,
|
||||
pboxes = native_text_boxes.boxes, -- boxes on page
|
||||
sboxes = native_text_boxes.boxes, -- boxes on screen
|
||||
pos0 = pos0,
|
||||
|
||||
@@ -331,7 +331,7 @@ function ReaderHighlight:saveHighlight()
|
||||
end
|
||||
|
||||
function ReaderHighlight:exportToClippings(page, item)
|
||||
DEBUG("export highlight to My Clippings")
|
||||
DEBUG("export highlight", item)
|
||||
local clippings = io.open("/mnt/us/documents/My Clippings.txt", "a+")
|
||||
if clippings and item.text then
|
||||
local current_locale = os.setlocale()
|
||||
|
||||
@@ -436,10 +436,6 @@ function ReaderView:onSetScreenMode(new_mode, rotation)
|
||||
self.ui:handleEvent(Event:new("SetDimensions", Screen:getSize()))
|
||||
end
|
||||
self.cur_rotation_mode = Screen.cur_rotation_mode
|
||||
|
||||
if new_mode == "landscape" and self.document.info.has_pages then
|
||||
self.ui:handleEvent(Event:new("SetZoomMode", "contentwidth"))
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
Submodule koreader-base updated: 2ec1e66a21...730c130930
@@ -1,7 +1,7 @@
|
||||
all: update
|
||||
|
||||
update:
|
||||
tx pull -a
|
||||
tx pull -a -f
|
||||
|
||||
bootstrap:
|
||||
tx set --auto-local -r koreader.koreader "<lang>/koreader.po" \
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user