Trans.nvim/lua/Trans/core/translate.lua

78 lines
1.6 KiB
Lua
Raw Normal View History

local Trans = require('Trans')
local util = Trans.util
2023-03-09 19:42:41 +08:00
2023-03-12 09:56:31 +08:00
vim.pretty_print(Trans.conf)
local function new_data(opts)
2023-03-09 19:42:41 +08:00
opts = opts or {}
2023-03-12 09:56:31 +08:00
local mode = opts.method or ({
n = 'normal',
v = 'visual',
2023-03-11 11:32:13 +08:00
})[vim.api.nvim_get_mode().mode]
2023-03-12 09:56:31 +08:00
local str = util.get_str(mode)
2023-03-09 19:42:41 +08:00
if str == '' then return end
2023-03-12 09:56:31 +08:00
local strategy = Trans.conf.strategy[mode]
2023-03-09 19:42:41 +08:00
local data = {
str = str,
2023-03-12 09:56:31 +08:00
mode = mode,
frontend = strategy.frontend,
2023-03-12 09:56:31 +08:00
backend = strategy.backend,
2023-03-11 11:32:13 +08:00
result = {},
2023-03-09 19:42:41 +08:00
}
if util.is_English(str) then
data.from = 'en'
data.to = 'zh'
else
data.from = 'zh'
data.to = 'en'
end
return data
end
2023-03-09 19:42:41 +08:00
local function set_result(data)
2023-03-12 09:56:31 +08:00
-- local t_backend = require('Trans.backend')
-- for _, name in rdata.backend do
-- local backend = t_backend[name]
-- backend.query(data)
-- if backend.no_wait then
-- end
-- end
2023-03-11 11:32:13 +08:00
require('Trans.backend').baidu.query(data)
local thread = coroutine.running()
local resume = function()
coroutine.resume(thread)
end
local time = 0
while data.result == nil do
vim.defer_fn(resume, 400)
time = time + 1
print('waiting' .. ('.'):rep(time))
coroutine.yield()
end
vim.pretty_print(data)
end
local function render_window()
2023-03-11 11:32:13 +08:00
end
2023-03-11 11:32:13 +08:00
-- HACK : Core process logic
local function process(opts)
Trans.translate = coroutine.wrap(process)
local data = new_data(opts)
if not data then return end
set_result(data)
if data.result == false then return end
2023-03-09 19:42:41 +08:00
render_window()
2023-03-09 19:42:41 +08:00
end
return coroutine.wrap(process)