Skip to content

Commit

Permalink
Refine lua scripts.
Browse files Browse the repository at this point in the history
  • Loading branch information
Ace-Who committed Apr 10, 2020
1 parent 272080b commit d16d4bf
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 38 deletions.
6 changes: 5 additions & 1 deletion schema/lua/ace/os_tools.lua
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@ end
local function preedit_lazy_clock_filter(input, env)
if env.engine.context:get_option('preedit_lazy_clock') then
for cand in input:iter() do
cand.preedit = cand.preedit .. ' ' .. os.date("%H:%M:%S")
if cand.preedit:find('\t') then
cand.preedit = cand.preedit .. ' ' .. os.date("%H:%M:%S")
else
cand.preedit = cand.preedit .. '\t' .. os.date("%H:%M:%S")
end
yield(cand)
end
else
Expand Down
24 changes: 14 additions & 10 deletions schema/lua/ace/xuma_52p_precand.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,24 @@ end

local function filter(input, env)
local context = env.engine.context
if context:get_option("xuma_52p_precand") then
local raw_inp = context.input
if raw_inp:find('%a$') then
raw_inp = raw_inp:match('%a+$') -- 去掉前置标点部分
if context:get_option("xuma_52p_precand") and
context.caret_pos > 0 and
not context.input:find('^;') -- 本方案中分号引导用于实现其他多个功能
then
local sel_inp = context.input:sub(1, context.caret_pos)
if sel_inp:find('%a$') then -- 一定要加这个判断,否则会影响符号键的功能
sel_inp = sel_inp:match('%a+$') -- 去掉前置标点部分
end
local detailed = context:get_option("detailed_x52_precand")
local codes, cand1, cand2, seg1, seg2
if raw_inp:len() < 3 then
if sel_inp:len() < 3 then
if detailed then
codes = { raw_inp .. '_1', raw_inp .. '_2', raw_inp .. '_3' }
codes = { sel_inp .. '_1', sel_inp .. '_2', sel_inp .. '_3' }
cand2 = map(codes, lookup(env.code2cand_rvdb))
end
else
seg1 = raw_inp:sub(1, 2)
seg2 = raw_inp:sub(3)
seg1 = sel_inp:sub(1, 2)
seg2 = sel_inp:sub(3)
cand1 = env.code2cand_rvdb:lookup(seg1 .. '_1')
codes = { seg2 .. '_1', seg2 .. '_2', seg2 .. '_3' }
cand2 = map(codes, lookup(env.code2cand_rvdb))
Expand All @@ -38,7 +41,7 @@ local function filter(input, env)
for cand in input:iter() do
if false then
cand.preedit = cand.text
elseif raw_inp:len() < 3 then
elseif sel_inp:len() < 3 then
if detailed then
if cand2[1] == cand.text then
cand.preedit = table.concat(cand2, '|')
Expand All @@ -53,11 +56,12 @@ local function filter(input, env)
-- cand.preedit = ('%s%s|%s'):format(cand1, cand2[1], cand.text)
cand.preedit = ('%s+%s=%s'):format(cand1, table.concat(cand2, '|'), cand.text)
-- cand.preedit = ('%s%s%s%s'):format(
-- cand1, raw_inp:sub(1,2), cand2[1], raw_inp:sub(3))
-- cand1, sel_inp:sub(1,2), cand2[1], sel_inp:sub(3))
else
cand.preedit = ('%s%s'):format(cand1, cand2[1])
end
end
cand.preedit = cand.preedit .. '\t'
yield(cand)
end
else
Expand Down
50 changes: 24 additions & 26 deletions schema/lua/ace/xuma_postpone_fullcode.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,29 @@
-- 出现重码时,将全码匹配且有简码的「单字」「适当」后置。
-- 目前的实现方式,原理适用于所有使用规则简码的形码方案。

local radstr = ''
.. ' 一不了人之大上也子而生自其行十用发天方'
.. '日三小二心又长已月力文王西手工门身由儿入'
.. '己山曰世水立走女言马金口几气比白非夫未士'
.. '且目电八九七石车千干火臣广古早母乃亦示土'
.. '片音止食黑衣革巴户木米田毛永习耳雨皮甲凡'
.. '丁鱼牛申川鬼刀牙予骨末辛尤厂丰乌麻贝乙鸟'
.. '辰羊瓦虫尸鼻壬羽戊寸巳舟夕甫矛酉亥卜戈鼠'
.. '鹿弓瓜穴欠巾兀矢犬爪歹禾夭禺匕豕臼匚弋皿'
.. '缶髟钅攵幺卅艮耒隹殳攴長見風彡門貝車飛巛'
.. '馬魚齒頁鹵鳥丂丄丅丆丌丨丩丬丱丶丷丿乀乁'
.. '乂乚乛亅亠亻僉冂冊冎冖冫凵刂勹匸卄卌卝卩'
.. '厶吅囗夂夊宀屮巜廴廾彐彳忄戶扌朩氵氺灬為'
.. '烏爫爾爿牜犭疒癶礻糸糹纟罒耂艹虍衤覀訁讠'
.. '豸辶釒镸阝韋飠饣鬥黽'
.. '兀㐄㐅㔾䒑'

local function init(env)
local config = env.engine.schema.config
local code_rvdb = config:get_string('lua_reverse_db/code')
env.code_rvdb = ReverseDb('build/' .. code_rvdb .. '.reverse.bin')
env.his_inp = config:get_string('history/input')
env.delimiter = config:get_string('speller/delimiter')
env.radstr = ''
.. ' 一不了人之大上也子而生自其行十用发天方'
.. '日三小二心又长已月力文王西手工门身由儿入'
.. '己山曰世水立走女言马金口几气比白非夫未士'
.. '且目电八九七石车千干火臣广古早母乃亦示土'
.. '片音止食黑衣革巴户木米田毛永习耳雨皮甲凡'
.. '丁鱼牛申川鬼刀牙予骨末辛尤厂丰乌麻贝乙鸟'
.. '辰羊瓦虫尸鼻壬羽戊寸巳舟夕甫矛酉亥卜戈鼠'
.. '鹿弓瓜穴欠巾兀矢犬爪歹禾夭禺匕豕臼匚弋皿'
.. '缶髟钅攵幺卅艮耒隹殳攴長見風彡門貝車飛巛'
.. '馬魚齒頁鹵鳥丂丄丅丆丌丨丩丬丱丶丷丿乀乁'
.. '乂乚乛亅亠亻僉冂冊冎冖冫凵刂勹匸卄卌卝卩'
.. '厶吅囗夂夊宀屮巜廴廾彐彳忄戶扌朩氵氺灬為'
.. '烏爫爾爿牜犭疒癶礻糸糹纟罒耂艹虍衤覀訁讠'
.. '豸辶釒镸阝韋飠饣鬥黽'
.. '兀㐄㐅㔾䒑'
end

local function get_short(codestr)
Expand All @@ -35,7 +36,7 @@ local function get_short(codestr)
end
end

local function is_longer_and_full(cand, env)
local function has_short_and_is_full(cand, env)
-- completion 和 sentence 类型不属于精确匹配,但不能仅用 cand.type 判断,因为
-- 可能被 simplifier 覆盖为 simplified 类型。先行判断 cand.type 并非必要,只是
-- 为了轻微的性能优势。
Expand All @@ -48,7 +49,7 @@ local function is_longer_and_full(cand, env)
-- cand_input = cand_input:gsub('[ `\']', '')
cand_input = cand_input:gsub('[' .. env.delimiter .. ']', '')
-- 字根可能设置了特殊扩展码,不视作全码,不予后置。
if cand_input:len() > 2 and env.radstr:find(cand.text, 1, true) then
if cand_input:len() > 2 and radstr:find(cand.text, 1, true) then
return
end
-- history_translator 不后置。
Expand Down Expand Up @@ -79,11 +80,13 @@ local function filter(input, env)
else
-- 顶功方案使用 script_translator,没有 completion ,但会匹配部分输入,
-- 如输入 otu 且光标在 u 后时会出现编码为 ot 的候选,需单独排除。不过通
-- 过码表填满三码和四码的位置,就没有这个问题了。但是造句翻译器还是需要
-- 过码表填满三码和四码的位置,就没有这个问题了。但是造词翻译器还是需要
--
-- 全角空格(U+3000)是顶功方案用来补空的候选,后置也不宜越过它。
local is_bad_script_cand = cand._end < context.caret_pos
local drop, is_comp = is_longer_and_full(cand, env)
if pos >= max_pos or is_bad_script_cand or is_comp then
local drop, is_comp = has_short_and_is_full(cand, env)
if pos >= max_pos
or is_bad_script_cand or is_comp or cand.text == ' ' then
for i, cand in ipairs(dropped_cands) do yield(cand) end
done_drop = true
yield(cand)
Expand All @@ -102,20 +105,15 @@ end
return { init = init, func = filter }

--[[ 测试例字:
一 原 gu
大 把 fd
和 舌 rov
中 喝 oku
我 箋 pffg
出 艸 糾 ⾋ aau
在 黄土 hkjv
地 軐 jbe
是 鶗 kglu
上 肯 ls
道 单身汉 xtzd
以 (多个词组) cwuu
儿 (多个词组) ve
了 (多个词组) bl
同 同路 mgov
只 叭 otu
--]]
2 changes: 1 addition & 1 deletion schema/lua/ace/xuma_spelling.lua
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ local function get_tricomment(cand, env)
local code = env.code_rvdb:lookup(ctext)
if code ~= '' then
-- 按长度排列多个编码。
code = matchstr(code, '%a+')
code = matchstr(code, '%S+')
table.sort(code, function(i, j) return i:len() < j:len() end)
code = table.concat(code, ' ')
return '' .. spelling .. ' · ' .. code .. ''
Expand Down

0 comments on commit d16d4bf

Please sign in to comment.