From 7a998551e042d1eb13c35ae73daf0d965e8631d9 Mon Sep 17 00:00:00 2001 From: Dvel Date: Wed, 14 Jun 2023 20:03:13 +0800 Subject: [PATCH] refactor date_translator --- lua/date_translator.lua | 93 ++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 58 deletions(-) diff --git a/lua/date_translator.lua b/lua/date_translator.lua index cb68383..2e00c19 100644 --- a/lua/date_translator.lua +++ b/lua/date_translator.lua @@ -1,29 +1,10 @@ -- 日期时间 -- 提高权重的原因:因为在方案中设置了大于 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 yield_cand(seg, text) + local cand = Candidate('date', seg.start, seg._end, text, '') + cand.quality = 100 + yield(cand) +end local function date_translator(input, seg, env) if not env.date then @@ -36,47 +17,42 @@ local function date_translator(input, seg, env) 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 + local current_time = os.time() + yield_cand(seg, os.date('%Y-%m-%d', current_time)) + yield_cand(seg, os.date('%Y/%m/%d', current_time)) + yield_cand(seg, os.date('%Y.%m.%d', current_time)) + yield_cand(seg, os.date('%Y%m%d', current_time)) + yield_cand(seg, os.date('%Y 年 %m 月 %d 日', current_time):gsub(' 0', ' ')) + -- 时间 - if (input == env.time) then - for _, fmt in ipairs(formats.time) do - yield_cand('time', os.date(fmt, current_time)) - end - end + elseif (input == env.time) then + local current_time = os.time() + yield_cand(seg, os.date('%H:%M', current_time)) + yield_cand(seg, os.date('%H:%M:%S', current_time)) + -- 星期 - 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 + elseif (input == env.week) then + local current_time = os.time() + local week_tab = {'日', '一', '二', '三', '四', '五', '六'} + local text = week_tab[tonumber(os.date('%w', current_time) + 1)] + yield_cand(seg, '星期' .. text) + yield_cand(seg, '礼拜' .. text) + yield_cand(seg, '周' .. text) + -- 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 + elseif (input == env.datetime) then + local current_time = os.time() + yield_cand(seg, os.date('%Y-%m-%dT%H:%M:%S+08:00', current_time)) + yield_cand(seg, os.date('%Y%m%d%H%M%S', current_time)) + -- 时间戳(十位数,到秒,示例 1650861664) - if (input == env.timestamp) then - for _, fmt in ipairs(formats.timestamp) do - yield_cand('timestamp', string.format(fmt, current_time)) - end + elseif (input == env.timestamp) then + local current_time = os.time() + yield_cand(seg, string.format('%d', current_time)) end + -- -- 显示内存 -- local cand = Candidate("date", seg.start, seg._end, ("%.f"):format(collectgarbage('count')), "") -- cand.quality = 100 @@ -89,4 +65,5 @@ local function date_translator(input, seg, env) -- end end + return date_translator