33 lines
1.3 KiB
Lua
33 lines
1.3 KiB
Lua
-- v 模式,单个字符优先
|
||
-- 因为设置了英文翻译器的 initial_quality 大于 1,导致输入「va」时,候选项是「van vain …… ā á ǎ à」
|
||
-- 把候选项应改为「ā á ǎ à …… van vain」,让单个字符的排在前面
|
||
-- 感谢改进 @[t123yh](https://github.com/t123yh) @[Shewer Lu](https://github.com/shewer)
|
||
local function v_filter(input, env)
|
||
local code = env.engine.context.input -- 当前编码
|
||
env.v_spec_arr = env.v_spec_arr or Set({ "0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣", "Vs." })
|
||
-- 仅当当前输入以 v 开头,并且编码长度为 2,才进行处理
|
||
if (string.len(code) == 2 and string.find(code, "^v")) then
|
||
local l = {}
|
||
for cand in input:iter() do
|
||
-- 特殊情况处理
|
||
if (env.v_spec_arr[cand.text]) then
|
||
yield(cand)
|
||
-- 候选项为单个字符的,提到前面来。
|
||
elseif (utf8.len(cand.text) == 1) then
|
||
yield(cand)
|
||
else
|
||
table.insert(l, cand)
|
||
end
|
||
end
|
||
for _, cand in ipairs(l) do
|
||
yield(cand)
|
||
end
|
||
else
|
||
for cand in input:iter() do
|
||
yield(cand)
|
||
end
|
||
end
|
||
end
|
||
|
||
return v_filter
|