diff --git a/base b/base index 959f8c216..3260f0494 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 959f8c2160abee41b846158b2b06820617427b38 +Subproject commit 3260f0494f7558f234806e68adb92606af391f8f diff --git a/frontend/apps/reader/modules/readerdictionary.lua b/frontend/apps/reader/modules/readerdictionary.lua index e1ee8d2f7..398df95e5 100644 --- a/frontend/apps/reader/modules/readerdictionary.lua +++ b/frontend/apps/reader/modules/readerdictionary.lua @@ -32,21 +32,24 @@ function ReaderDictionary:onLookupWord(word, box, highlight) return true end -local function tidyCDATA(results) +local function tidy_markup(results) local cdata_tag = "" local format_escape = "&[29Ib%+]{(.-)}" for _, result in ipairs(results) do + local def = result.definition + -- preserve the
tag for line break + def = def:gsub("<[bB][rR] ?/?>", "\n") -- parse CDATA text in XML - if result.definition:find(cdata_tag) then - local def = result.definition:gsub(cdata_tag, "%1") - -- ignore all tags - def = def:gsub("%b<>", "") + if def:find(cdata_tag) then + def = def:gsub(cdata_tag, "%1") -- ignore format strings while def:find(format_escape) do def = def:gsub(format_escape, "%1") end - result.definition = def end + -- ignore all markup tags + def = def:gsub("%b<>", "") + result.definition = def end return results end @@ -66,7 +69,7 @@ function ReaderDictionary:stardictLookup(word, box) local ok, results = pcall(JSON.decode, JSON, results_str) if ok and results then DEBUG("lookup result table:", word, results) - self:showDict(word, tidyCDATA(results), box) + self:showDict(word, tidy_markup(results), box) else -- dummy results results = {