mirror of
https://github.com/koreader/koreader
synced 2024-11-11 19:11:14 +00:00
3066c86e38
This is a major overhaul of the hardware abstraction layer. A few notes: General platform distinction happens in frontend/device.lua which will delegate everything else to frontend/device/<platform_name>/device.lua which should extend frontend/device/generic/device.lua Screen handling is implemented in frontend/device/screen.lua which includes the *functionality* to support device specifics. Actually setting up the device specific functionality, however, is done in the device specific setup code in the relevant device.lua file. The same goes for input handling.
73 lines
2.3 KiB
Lua
73 lines
2.3 KiB
Lua
local ReaderDictionary = require("apps/reader/modules/readerdictionary")
|
|
local EventListener = require("ui/widget/eventlistener")
|
|
local NetworkMgr = require("ui/networkmgr")
|
|
local Translator = require("ui/translator")
|
|
local Wikipedia = require("ui/wikipedia")
|
|
local UIManager = require("ui/uimanager")
|
|
local Geom = require("ui/geometry")
|
|
local Screen = require("device").screen
|
|
local JSON = require("JSON")
|
|
local DEBUG = require("dbg")
|
|
local _ = require("gettext")
|
|
|
|
-- Wikipedia as a special dictionary
|
|
local ReaderWikipedia = ReaderDictionary:extend{
|
|
-- identify itself
|
|
wiki = true,
|
|
no_page = _("No wiki page found."),
|
|
}
|
|
|
|
-- the super "class" ReaderDictionary has already registers a menu entry
|
|
-- we should override the init function in ReaderWikipedia
|
|
function ReaderWikipedia:init()
|
|
end
|
|
|
|
function ReaderWikipedia:onLookupWikipedia(word, box)
|
|
-- detect language of the text
|
|
local ok, lang = pcall(Translator.detect, Translator, word)
|
|
-- prompt users to turn on Wifi if network is unreachable
|
|
if not ok and lang and lang:find("Network is unreachable") then
|
|
NetworkMgr:promptWifiOn()
|
|
return
|
|
end
|
|
-- convert "zh-CN" and "zh-TW" to "zh"
|
|
lang = lang:match("(.*)-") or lang
|
|
-- strip punctuation characters around selected word
|
|
word = string.gsub(word, "^%p+", '')
|
|
word = string.gsub(word, "%p+$", '')
|
|
-- seems lower case phrase has higher hit rate
|
|
word = string.lower(word)
|
|
local results = {}
|
|
local ok, pages = pcall(Wikipedia.wikintro, Wikipedia, word, lang)
|
|
if ok and pages then
|
|
for pageid, page in pairs(pages) do
|
|
local result = {
|
|
dict = _("Wikipedia"),
|
|
word = page.title,
|
|
definition = page.extract or self.no_page,
|
|
}
|
|
table.insert(results, result)
|
|
end
|
|
DEBUG("lookup result:", word, results)
|
|
self:showDict(word, results, box)
|
|
else
|
|
DEBUG("error:", pages)
|
|
-- dummy results
|
|
results = {
|
|
{
|
|
dict = _("Wikipedia"),
|
|
word = word,
|
|
definition = self.no_page,
|
|
}
|
|
}
|
|
DEBUG("dummy result table:", word, results)
|
|
self:showDict(word, results, box)
|
|
end
|
|
end
|
|
|
|
-- override onSaveSettings in ReaderDictionary
|
|
function ReaderWikipedia:onSaveSettings()
|
|
end
|
|
|
|
return ReaderWikipedia
|