rime-ice/lua/date_translator.lua
2023-05-15 01:04:46 +08:00

93 lines
2.9 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 日期时间
-- 提高权重的原因:因为在方案中设置了大于 1 的 initial_quality导致 rq sj xq dt ts 产出的候选项在所有词语的最后。
local formats = {
date = {
'%Y-%m-%d',
'%Y/%m/%d',
'%Y.%m.%d',
'%Y%m%d',
},
time = {
'%H:%M',
'%H:%M:%S'
},
datetime = {
'%Y-%m-%dT%H:%M:%S+08:00',
'%Y%m%d%H%M%S'
},
week = {
'星期%s',
'礼拜%s',
'周%s'
},
timestamp = {
'%d'
}
}
local function date_translator(input, seg, env)
if not env.date then
local config = env.engine.schema.config
env.name_space = env.name_space:gsub('^*', '')
env.date = config:get_string(env.name_space .. '/date') or 'rq'
env.time = config:get_string(env.name_space .. '/time') or 'sj'
env.week = config:get_string(env.name_space .. '/week') or 'xq'
env.datetime = config:get_string(env.name_space .. '/datetime') or 'dt'
env.timestamp = config:get_string(env.name_space .. '/timestamp') or 'ts'
end
local current_time = os.time()
local yield_cand = function(type, text)
local cand = Candidate(type, seg.start, seg._end, text, '')
cand.quality = 100
yield(cand)
end
-- 日期
if (input == env.date) then
for _, fmt in ipairs(formats.date) do
yield_cand('date', os.date(fmt, current_time))
end
yield_cand('date', os.date('%Y 年 %m 月 %d 日', current_time):gsub(' 0', ' '))
end
-- 时间
if (input == env.time) then
for _, fmt in ipairs(formats.time) do
yield_cand('time', os.date(fmt, current_time))
end
end
-- 星期
if (input == env.week) then
local week_tab = { '', '', '', '', '', '', '' }
for _, fmt in ipairs(formats.week) do
local text = week_tab[tonumber(os.date('%w', current_time) + 1)]
yield_cand('week', string.format(fmt, text))
end
end
-- ISO 8601/RFC 3339 的时间格式 (固定东八区)(示例 2022-01-07T20:42:51+08:00
if (input == env.datetime) then
for _, fmt in ipairs(formats.datetime) do
yield_cand('datetime', os.date(fmt, current_time))
end
end
-- 时间戳(十位数,到秒,示例 1650861664
if (input == env.timestamp) then
for _, fmt in ipairs(formats.timestamp) do
yield_cand('timestamp', string.format(fmt, current_time))
end
end
-- -- 显示内存
-- local cand = Candidate("date", seg.start, seg._end, ("%.f"):format(collectgarbage('count')), "")
-- cand.quality = 100
-- yield(cand)
-- if input == "xxx" then
-- collectgarbage()
-- local cand = Candidate("date", seg.start, seg._end, "collectgarbage()", "")
-- cand.quality = 100
-- yield(cand)
-- end
end
return date_translator