2023-03-16 19:25:08 +08:00
|
|
|
local node = require('Trans').util.node
|
|
|
|
local it, t, f, co = node.item, node.text, node.format, node.conjunction
|
|
|
|
|
2023-03-16 17:17:30 +08:00
|
|
|
---@type TransHoverRenderer
|
|
|
|
local M = {}
|
2023-03-16 21:15:00 +08:00
|
|
|
local interval = (' '):rep(4)
|
2023-03-16 17:17:30 +08:00
|
|
|
|
2023-03-16 19:25:08 +08:00
|
|
|
function M.web(hover, result)
|
|
|
|
if not result.web then return end
|
2023-03-16 21:15:00 +08:00
|
|
|
local buffer = hover.buffer
|
|
|
|
buffer:setline(co('网络释义'))
|
|
|
|
|
2023-03-17 08:15:10 +08:00
|
|
|
local indent = interval .. interval .. hover.opts.icon.list .. ' '
|
2023-03-17 09:01:36 +08:00
|
|
|
local function remove_duplicate(strs)
|
|
|
|
local uniq_strs = {}
|
|
|
|
local str_map = {}
|
|
|
|
local opts = { plain = true, trim_empty = true }
|
|
|
|
|
|
|
|
for i = 1, #strs do
|
|
|
|
local fields = vim.split(strs[i], '; ', opts)
|
|
|
|
for j = 1, #fields do
|
|
|
|
local field = fields[j]
|
|
|
|
if not str_map[field] then
|
|
|
|
uniq_strs[#uniq_strs + 1] = field
|
|
|
|
str_map[field] = true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return uniq_strs
|
|
|
|
end
|
|
|
|
|
2023-03-16 21:15:00 +08:00
|
|
|
for _, w in ipairs(result.web) do
|
|
|
|
buffer:setline(it(
|
2023-03-17 08:15:10 +08:00
|
|
|
interval .. w.key,
|
2023-03-16 21:15:00 +08:00
|
|
|
'TransWeb'
|
|
|
|
))
|
2023-03-17 08:15:10 +08:00
|
|
|
|
2023-03-17 09:01:36 +08:00
|
|
|
for _, v in ipairs(remove_duplicate(w.value)) do
|
2023-03-17 08:15:10 +08:00
|
|
|
buffer:setline(it(
|
|
|
|
indent .. v,
|
|
|
|
'TransWeb'
|
|
|
|
))
|
|
|
|
end
|
2023-03-16 21:15:00 +08:00
|
|
|
end
|
|
|
|
buffer:setline('')
|
|
|
|
end
|
2023-03-16 19:25:08 +08:00
|
|
|
|
2023-03-16 21:15:00 +08:00
|
|
|
function M.explains(hover, result)
|
|
|
|
local explains = result.explains
|
|
|
|
if not explains then return end
|
|
|
|
local buffer = hover.buffer
|
|
|
|
buffer:setline(co('基本释义'))
|
|
|
|
|
|
|
|
|
|
|
|
for i = 1, #explains, 2 do
|
|
|
|
buffer:setline(it(
|
|
|
|
interval .. explains[i] ..
|
|
|
|
(explains[i + 1] and interval .. explains[i + 1] or ''),
|
|
|
|
'TransExplains'
|
|
|
|
))
|
|
|
|
end
|
|
|
|
buffer:setline('')
|
2023-03-16 17:17:30 +08:00
|
|
|
end
|
|
|
|
|
2023-03-16 21:15:00 +08:00
|
|
|
M.title = require('Trans').frontend.hover.offline.title
|
|
|
|
|
2023-03-16 17:17:30 +08:00
|
|
|
return M
|