From fea7b93b62d69565bd52082b837bbdb3c57d88ff Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 28 Oct 2014 15:57:01 +0800 Subject: [PATCH] fix #1035 by CDATA tidy --- base | 2 +- .../apps/reader/modules/readerdictionary.lua | 21 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/base b/base index 1c623700f..267cfbd22 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 1c623700fb4499e4dcb2d56f59319c4be235fe3b +Subproject commit 267cfbd223d6d606329d3f13b6f3b6bd486239eb diff --git a/frontend/apps/reader/modules/readerdictionary.lua b/frontend/apps/reader/modules/readerdictionary.lua index c624feb9e..b2cff0be0 100644 --- a/frontend/apps/reader/modules/readerdictionary.lua +++ b/frontend/apps/reader/modules/readerdictionary.lua @@ -32,6 +32,25 @@ function ReaderDictionary:onLookupWord(word, box, highlight) return true end +local function tidyCDATA(results) + local cdata_tag = "" + local format_escape = "&[29Ib%+]{(.-)}" + for _, result in ipairs(results) do + -- 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<>", "") + -- ignore format strings + while def:find(format_escape) do + def = def:gsub(format_escape, "%1") + end + result.definition = def + end + end + return results +end + function ReaderDictionary:stardictLookup(word, box) DEBUG("lookup word:", word, box) if word then @@ -47,7 +66,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, results, box) + self:showDict(word, tidyCDATA(results), box) else -- dummy results results = {