local EventListener = require("ui/widget/eventlistener") local UIManager = require("ui/uimanager") local DictQuickLookup = require("ui/widget/dictquicklookup") local Screen = require("ui/screen") local JSON = require("JSON") local DEBUG = require("dbg") local ReaderDictionary = EventListener:new{} function ReaderDictionary:onLookupWord(word) self:stardictLookup(word) end function ReaderDictionary:stardictLookup(word) DEBUG("lookup word:", word) if word then -- strip punctuation characters around selected word word = string.gsub(word, "^%p+", '') word = string.gsub(word, "%p+$", '') DEBUG("stripped word:", word) -- escape quotes and other funny characters in word local std_out = io.popen("./sdcv --utf8-input --utf8-output -nj "..("%q"):format(word), "r") local results_str = nil if std_out then results_str = std_out:read("*all") end if results_str then --DEBUG("result str:", word, results_str) local ok, results = pcall(JSON.decode, JSON, results_str) --DEBUG("lookup result table:", word, results) self:showDict(results) end end end function ReaderDictionary:showDict(results) if results and results[1] then DEBUG("showing quick lookup dictionary window") UIManager:show(DictQuickLookup:new{ ui = self.ui, dialog = self.dialog, results = results, dictionary = self.default_dictionary, width = Screen:getWidth() - Screen:scaleByDPI(120), height = Screen:getHeight()*0.43, }) end end function ReaderDictionary:onUpdateDefaultDict(dict) DEBUG("make default dictionary:", dict) self.default_dictionary = dict end function ReaderDictionary:onReadSettings(config) self.default_dictionary = config:readSetting("default_dictionary") end function ReaderDictionary:onCloseDocument() self.ui.doc_settings:saveSetting("default_dictionary", self.default_dictionary) end return ReaderDictionary