Rime 中州韵输入法 lua 配置获取各类时间
- 实用技巧
- 2024-08-16
- 73热度
- 0评论
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能。
TIME
Rime是一款可以高度自定义的输入法,相关教程可以查看往期文章,关于时间获取是指输入一个指定关键字,输出当前时间,效果如下(我定义了time关键字):
实现如下:
①在用户文件夹中新建一个rime.lua文件加入如下代码
time_translator = require("time")
②在用户文件夹下新建文件夹Lua,并新建文件time.lua(此处的文件名必需与上文require中的内容相同),加入如下lua代码:
--lua语言中的注释用“--”
local function translator(input, seg)
if (input == "time") then --关键字更改,你也可以用or语句定义多个关键字
yield(Candidate("time", seg.start, seg._end, os.date("%H:%M"), " "))
yield(Candidate("time", seg.start, seg._end, os.date("%H点%M分"), " "))
yield(Candidate("time", seg.start, seg._end, os.date("%H:%M:%S"), " "))
yield(Candidate("time", seg.start, seg._end, os.date("%H点%M分%S秒"), " "))
end
end
return translator
此处代码用lua语言编写而成,若有一定语言基础,根据自己的需求调整响应代码。
③在用户配置文件中开启(*.custom.yaml文件)
#若你的配置文件中有engine/translator,则后面直接加入代码
- lua_translator@time_translator
#若你的配置文件中无engine/translator项,则加入
engine/+:
translators/+:
- lua_translator@time_translator
#此处@后面的名称必需与rime.lua文件中的定义名称一致
DATE
与time类似,只需修改lua文件中的实现代码即可,我定义的关键字是date,效果如下:
实现如下:①在rime.lua文件加入如下代码
date_translator = require("date")
②在文件夹Lua中新建文件date.lua(此处的文件名必需与上文require中的内容相同),加入如下lua代码:
--lua语言中的注释用“--”
local function translator(input, seg)
if (input == "date") then
------------------------------------------------------------------------------------
--普通日期1,类似2022年01月02日
date1=os.date("%Y年%m月%d日")
date_y=os.date("%Y") --取年
date_m=os.date("%m") --取月
date_d=os.date("%d") --取日
--yield(Candidate("date", seg.start, seg._end, date1, " "))
------------------------------------------------------------------------------------
--普通日期2,类似2022年1月1日
num_m=os.date("%m")+0
num_m1=math.modf(num_m)
num_d=os.date("%d")+0
num_d1=math.modf(num_d)
date2=os.date("%Y年")..tostring(num_m1).."月"..tostring(num_d1).."日"
yield(Candidate("date", seg.start, seg._end, date2, " "))
------------------------------------------------------------------------------------
--普通日期3,类似1月1日
num_m=os.date("%m")+0
num_m1=math.modf(num_m)
num_d=os.date("%d")+0
num_d1=math.modf(num_d)
date3=tostring(num_m1).."月"..tostring(num_d1).."日"
yield(Candidate("date", seg.start, seg._end, date3, " "))
yield(Candidate("date", seg.start, seg._end, os.date("%Y/%m/%d"), " "))
yield(Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), " "))
------------------------------------------------------------------------------------
--大写日期,类似二〇二〇年十一月二十六日
date_y=date_y:gsub("%d",{
["1"]="一",
["2"]="二",
["3"]="三",
["4"]="四",
["5"]="五",
["6"]="六",
["7"]="七",
["8"]="八",
["9"]="九",
["0"]="〇",
})
date_y=date_y.."年"
date_m=date_m:gsub("%d",{
["1"]="一",
["2"]="二",
["3"]="三",
["4"]="四",
["5"]="五",
["6"]="六",
["7"]="七",
["8"]="八",
["9"]="九",
["0"]="",
})
date_m=date_m.."月"
if num_m1==10 then date_m="十月" end
if num_m1==11 then date_m="十一月" end
if num_m1==12 then date_m="十二月" end
date_d=date_d:gsub("%d",{
["1"]="一",
["2"]="二",
["3"]="三",
["4"]="四",
["5"]="五",
["6"]="六",
["7"]="七",
["8"]="八",
["9"]="九",
["0"]="",
})
date_d=date_d.."日"
if num_d1>9 then
if num_d1<19 then
date_d="十"..string.sub(date_d,4,#date_d)
end
end
if num_d1>19 then date_d=string.sub(date_d,1,3).."十"..string.sub(date_d,4,#date_d) end
date4=date_y..date_m..date_d
yield(Candidate("date", seg.start, seg._end, date4, " "))
------------------------------------------------------------------------------------
--英文日期
local date_d=os.date("%d")
local date_m=os.date("%m")
local date_y=os.date("%Y")
local date_m1=""
local date_m2=""
if date_m=="01" then
date_m1="Jan."
date_m2="January"
end
if date_m=="02" then
date_m1="Feb."
date_m2="February"
end
if date_m=="03" then
date_m1="Mar."
date_m2="March"
end
if date_m=="04" then
date_m1="Apr."
date_m2="April"
end
if date_m=="05" then
date_m1="May."
date_m2="May"
end
if date_m=="06" then
date_m1="Jun."
date_m2="June"
end
if date_m=="07" then
date_m1="Jul."
date_m2="July"
end
if date_m=="08" then
date_m1="Aug."
date_m2="August"
end
if date_m=="09" then
date_m1="Sept."
date_m2="September"
end
if date_m=="10" then
date_m1="Oct."
date_m2="October"
end
if date_m=="11" then
date_m1="Nov."
date_m2="November"
end
if date_m=="12" then
date_m1="Dec."
date_m2="December"
end
if date_d=="0" then
symbal="st"
elseif date_d=="1" then
symbal="nd"
elseif date_d=="2" then
symbal="rd"
else
symbal="th"
end
date5=date_m1.." "..date_d..symbal..", "..date_y
date6=date_m2.." "..date_d..symbal..", "..date_y
yield(Candidate("date", seg.start, seg._end, date5, " "))
yield(Candidate("date", seg.start, seg._end, date6, " "))
yield(Candidate("date", seg.start, seg._end, os.date("%Y%m%d"), " "))
end
end
------------------------------------------------------------------------------------
return translator
③在用户配置文件中开启(*.schema.yaml文件)
#若你的配置文件中有engine/translator,则后面直接加入代码
- lua_translator@date_translator
#若你的配置文件中无engine/translator项,则加入
engine/+:
translators/+:
- lua_translator@date_translator
#此处@后面的名称必需与rime.lua文件中的定义名称一致
WEEK
与time类似,只需修改lua文件中的实现代码即可,我定义的关键字是week,效果如下:
实现如下:①在rime.lua文件加入如下代码
week_translator = require("week")
②在文件夹Lua中新建文件date.lua(此处的文件名必需与上文require中的内容相同),加入如下lua代码:
--lua语言中的注释用“--”
function translator(input, seg)
if (input == "week") then
local day_w=os.date("%w")
local day_w1=""
local day_w2=""
local day_w3=""
if day_w=="0" then
day_w1="星期日"
day_w2="Sunday"
day_w3="Sun."
end
if day_w=="1" then
day_w1="星期一"
day_w2="Monday"
day_w3="Mon."
end
if day_w=="2" then
day_w1="星期二"
day_w2="Tuesday"
day_w3="Tues."
end
if day_w=="3" then
day_w1="星期三"
day_w2="Wednesday"
day_w3="Wed."
end
if day_w=="4" then
day_w1="星期四"
day_w2="Thursday"
day_w3="Thur."
end
if day_w=="5" then
day_w1="星期五"
day_w2="Friday"
day_w3="Fri."
end
if day_w=="6" then
day_w1="星期六"
day_w2="Saturday"
day_w3="Sat."
end
yield(Candidate("date", seg.start, seg._end, day_w1, " "))
yield(Candidate("date", seg.start, seg._end, day_w2, " "))
yield(Candidate("date", seg.start, seg._end, day_w3, " "))
yield(Candidate("week", seg.start, seg._end, os.date("%w"),""))
end
end
return translator
③在用户配置文件中开启(*.schema.yaml文件)
#若你的配置文件中有engine/translator,则后面直接加入代码
- lua_translator@week_translator
#若你的配置文件中无engine/translator项,则加入
engine/+:
translators/+:
- lua_translator@week_translator
#此处@后面的名称必需与rime.lua文件中的定义名称一致
农历
Rime是一款可以高度自定义的输入法,前文讲述了time,date,week的定义方式
文章链接:RIME输入法获取当前时间(一)_惜洛-Jankin的博客-CSDN博客
现介绍获取当前农历时间的配置,效果如下(我定义了lunar关键字):
实现如下:
①在用户文件夹中新建一个rime.lua文件加入如下代码
lunar_translator = require("lunar")
②在文件夹Lua中新建文件lunar.lua(此处的文件名必需与上文require中的内容相同),加入如下lua代码:
--此处获取农历的代码来自博客
--https://blog.csdn.net/BlueMustard/article/details/120907984
------------------------------------------------------------------------------------
--天干名称
local nLTianGan = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}
--地支名称
local nLDiZhi = {"子","丑","寅","卯","辰","巳","午", "未","申","酉","戌","亥"}
--属相名称
local nLShuXing = {"鼠","牛","虎","兔","龙","蛇", "马","羊","猴","鸡","狗","猪"}
--农历日期名
local nLDayName =
{
"*","初一","初二","初三","初四","初五",
"初六","初七","初八","初九","初十",
"十一","十二","十三","十四","十五",
"十六","十七","十八","十九","二十",
"廿一","廿二","廿三","廿四","廿五",
"廿六","廿七","廿八","廿九","三十"
}
--农历月份名
local nLMonName = {"*","正","二","三","四","五","六", "七","八","九","十","十一","腊"}
local DaysToMonth366={ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }
local DaysToMonth365= { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }
local DateLunarInfo= { { 0, 2, 19, 19168 }, { 0, 2, 8, 42352 }, { 5, 1, 29, 21096 }, { 0, 2, 16, 53856 }, { 0, 2, 4, 55632 }, { 4, 1, 25, 27304 },
{ 0, 2, 13, 22176 }, { 0, 2, 2, 39632 }, { 2, 1, 22, 19176 }, { 0, 2, 10, 19168 }, { 6, 1, 30, 42200 }, { 0, 2, 18, 42192 },
{ 0, 2, 6, 53840 }, { 5, 1, 26, 54568 }, { 0, 2, 14, 46400 }, { 0, 2, 3, 54944 }, { 2, 1, 23, 38608 }, { 0, 2, 11, 38320 },
{ 7, 2, 1, 18872 }, { 0, 2, 20, 18800 }, { 0, 2, 8, 42160 }, { 5, 1, 28, 45656 }, { 0, 2, 16, 27216 }, { 0, 2, 5, 27968 },
{ 4, 1, 24, 44456 }, { 0, 2, 13, 11104 }, { 0, 2, 2, 38256 }, { 2, 1, 23, 18808 }, { 0, 2, 10, 18800 }, { 6, 1, 30, 25776 },
{ 0, 2, 17, 54432 }, { 0, 2, 6, 59984 }, { 5, 1, 26, 27976 }, { 0, 2, 14, 23248 }, { 0, 2, 4, 11104 }, { 3, 1, 24, 37744 },
{ 0, 2, 11, 37600 }, { 7, 1, 31, 51560 }, { 0, 2, 19, 51536 }, { 0, 2, 8, 54432 }, { 6, 1, 27, 55888 }, { 0, 2, 15, 46416 },
{ 0, 2, 5, 22176 }, { 4, 1, 25, 43736 }, { 0, 2, 13, 9680 }, { 0, 2, 2, 37584 }, { 2, 1, 22, 51544 }, { 0, 2, 10, 43344 },
{ 7, 1, 29, 46248 }, { 0, 2, 17, 27808 }, { 0, 2, 6, 46416 }, { 5, 1, 27, 21928 }, { 0, 2, 14, 19872 }, { 0, 2, 3, 42416 },
{ 3, 1, 24, 21176 }, { 0, 2, 12, 21168 }, { 8, 1, 31, 43344 }, { 0, 2, 18, 59728 }, { 0, 2, 8, 27296 }, { 6, 1, 28, 44368 },
{ 0, 2, 15, 43856 }, { 0, 2, 5, 19296 }, { 4, 1, 25, 42352 }, { 0, 2, 13, 42352 }, { 0, 2, 2, 21088 }, { 3, 1, 21, 59696 },
{ 0, 2, 9, 55632 }, { 7, 1, 30, 23208 }, { 0, 2, 17, 22176 }, { 0, 2, 6, 38608 }, { 5, 1, 27, 19176 }, { 0, 2, 15, 19152 },
{ 0, 2, 3, 42192 }, { 4, 1, 23, 53864 }, { 0, 2, 11, 53840 }, { 8, 1, 31, 54568 }, { 0, 2, 18, 46400 }, { 0, 2, 7, 46752 },
{ 6, 1, 28, 38608 }, { 0, 2, 16, 38320 }, { 0, 2, 5, 18864 }, { 4, 1, 25, 42168 }, { 0, 2, 13, 42160 }, { 10, 2, 2, 45656 },
{ 0, 2, 20, 27216 }, { 0, 2, 9, 27968 }, { 6, 1, 29, 44448 }, { 0, 2, 17, 43872 }, { 0, 2, 6, 38256 }, { 5, 1, 27, 18808 },
{ 0, 2, 15, 18800 }, { 0, 2, 4, 25776 }, { 3, 1, 23, 27216 }, { 0, 2, 10, 59984 }, { 8, 1, 31, 27432 }, { 0, 2, 19, 23232 },
{ 0, 2, 7, 43872 }, { 5, 1, 28, 37736 }, { 0, 2, 16, 37600 }, { 0, 2, 5, 51552 }, { 4, 1, 24, 54440 }, { 0, 2, 12, 54432 },
{ 0, 2, 1, 55888 }, { 2, 1, 22, 23208 }, { 0, 2, 9, 22176 }, { 7, 1, 29, 43736 }, { 0, 2, 18, 9680 }, { 0, 2, 7, 37584 },
{ 5, 1, 26, 51544 }, { 0, 2, 14, 43344 }, { 0, 2, 3, 46240 }, { 4, 1, 23, 46416 }, { 0, 2, 10, 44368 }, { 9, 1, 31, 21928 },
{ 0, 2, 19, 19360 }, { 0, 2, 8, 42416 }, { 6, 1, 28, 21176 }, { 0, 2, 16, 21168 }, { 0, 2, 5, 43312 }, { 4, 1, 25, 29864 },
{ 0, 2, 12, 27296 }, { 0, 2, 1, 44368 }, { 2, 1, 22, 19880 }, { 0, 2, 10, 19296 }, { 6, 1, 29, 42352 }, { 0, 2, 17, 42208 },
{ 0, 2, 6, 53856 }, { 5, 1, 26, 59696 }, { 0, 2, 13, 54576 }, { 0, 2, 3, 23200 }, { 3, 1, 23, 27472 }, { 0, 2, 11, 38608 },
{ 11, 1, 31, 19176 }, { 0, 2, 19, 19152 }, { 0, 2, 8, 42192 }, { 6, 1, 28, 53848 }, { 0, 2, 15, 53840 }, { 0, 2, 4, 54560 },
{ 5, 1, 24, 55968 }, { 0, 2, 12, 46496 }, { 0, 2, 1, 22224 }, { 2, 1, 22, 19160 }, { 0, 2, 10, 18864 }, { 7, 1, 30, 42168 },
{ 0, 2, 17, 42160 }, { 0, 2, 6, 43600 }, { 5, 1, 26, 46376 }, { 0, 2, 14, 27936 }, { 0, 2, 2, 44448 }, { 3, 1, 23, 21936 },
{ 0, 2, 11, 37744 }, { 8, 2, 1, 18808 }, { 0, 2, 19, 18800 }, { 0, 2, 8, 25776 }, { 6, 1, 28, 27216 }, { 0, 2, 15, 59984 },
{ 0, 2, 4, 27424 }, { 4, 1, 24, 43872 }, { 0, 2, 12, 43744 }, { 0, 2, 2, 37600 }, { 3, 1, 21, 51568 }, { 0, 2, 9, 51552 },
{ 7, 1, 29, 54440 }, { 0, 2, 17, 54432 }, { 0, 2, 5, 55888 }, { 5, 1, 26, 23208 }, { 0, 2, 14, 22176 }, { 0, 2, 3, 42704 },
{ 4, 1, 23, 21224 }, { 0, 2, 11, 21200 }, { 8, 1, 31, 43352 }, { 0, 2, 19, 43344 }, { 0, 2, 7, 46240 }, { 6, 1, 27, 46416 },
{ 0, 2, 15, 44368 }, { 0, 2, 5, 21920 }, { 4, 1, 24, 42448 }, { 0, 2, 12, 42416 }, { 0, 2, 2, 21168 }, { 3, 1, 22, 43320 },
{ 0, 2, 9, 26928 }, { 7, 1, 29, 29336 }, { 0, 2, 17, 27296 }, { 0, 2, 6, 44368 }, { 5, 1, 26, 19880 }, { 0, 2, 14, 19296 },
{ 0, 2, 3, 42352 }, { 4, 1, 24, 21104 }, { 0, 2, 10, 53856 }, { 8, 1, 30, 59696 }, { 0, 2, 18, 54560 }, { 0, 2, 7, 55968 },
{ 6, 1, 27, 27472 }, { 0, 2, 15, 22224 }, { 0, 2, 5, 19168 }, { 4, 1, 25, 42216 }, { 0, 2, 12, 42192 }, { 0, 2, 1, 53584 },
{ 2, 1, 21, 55592 }, { 0, 2, 9, 54560 } }
--转为二进制
function DecimalismToBinary(num)
local str = ""
local tmp = num
while (tmp > 0) do
if (tmp % 2 == 1) then
str = str .. "1"
else
str = str .. "0"
end
tmp = math.modf(tmp / 2)
end
str = string.reverse(str)
return str
end
--先补齐两个数字的二进制位数
function MakeSameLength(num1, num2)
local str1 = DecimalismToBinary(num1)
local str2 = DecimalismToBinary(num2)
local len1 = string.len(str1)
local len2 = string.len(str2)
local len = 0
local x = 0
if (len1 > len2) then
x = len1 - len2
for i = 1, x do
str2 = "0" .. str2
end
len = len1
elseif (len2 > len1) then
x = len2 - len1
for i = 1, x do
str1 = "0" .. str1
end
len = len2
end
len = len1
return str1, str2, len
end
--按位与
function BitAnd(num1, num2)
local str1, str2, len = MakeSameLength(num1, num2)
local rtmp = ""
for i = 1, len do
local st1 = tonumber(string.sub(str1, i, i))
local st2 = tonumber(string.sub(str2, i, i))
if(st1 == 0) then
rtmp = rtmp .. "0"
else
if (st2 ~= 0) then
rtmp = rtmp .. "1"
else
rtmp = rtmp .. "0"
end
end
end
return tonumber(rtmp,2)
end
--阳历转阴历
function GregorianToLunar(nSYear,nSMonth,nSDate)
local nLYear,nLMonth,nLDay
local i=(GregorianIsLeapYear(nSYear) == 1 and DaysToMonth366[nSMonth ] or DaysToMonth365[nSMonth ])+nSDate
nLYear = nSYear
local yearInfo
local yearInfo2
if nLYear == 2101 then
nLYear = nLYear -1
i=i+(GregorianIsLeapYear(nLYear) == 1 and 366 or 365)
yearInfo=GetYearInfo(nLYear,1)
yearInfo2=GetYearInfo(nLYear,2)
else
yearInfo=GetYearInfo(nLYear,1)
yearInfo2=GetYearInfo(nLYear,2)
if nSMonth <yearInfo or (nSMonth == yearInfo and nSDate < yearInfo2) then
nLYear=nLYear-1
i=i+(GregorianIsLeapYear(nLYear) == 1 and 366 or 365)
yearInfo=GetYearInfo(nLYear,1)
yearInfo2=GetYearInfo(nLYear,2)
end
end
i=i-DaysToMonth365[yearInfo]
i=i-yearInfo2+1
local num=32768
local yearInfo3=GetYearInfo(nLYear,3)
local num2=(BitAnd(yearInfo3,num)) ~= 0 and 30 or 29
nLMonth=1
while(i>num2) do
i=i-num2
nLMonth=nLMonth+1
num=num /2
num2=(BitAnd(yearInfo3,num)) ~= 0 and 30 or 29
end
nLDay=i
--生成农历天干、地支、属相 ==> nongLi--
local shuXing = nLShuXing[(((nLYear - 4) % 60) % 12) + 1]
local nongLi = shuXing .. '(' .. nLTianGan[(((nLYear - 4) % 60) % 10)+1] .. nLDiZhi[(((nLYear - 4) % 60) % 12) + 1] .. ')年'
local nLDate
--生成农历月、日 ==> nLDate--*/
if nLMonth < 1 then
nLDate = "闰" .. nLMonName[(-1 * nLMonth) + 1]
else
nLDate = nLMonName[nLMonth+1]
end
nLDate = nongLi..nLDate .. "月" .. nLDayName[nLDay+1]
return nLYear,nLMonth,nLDay,nLDate
end
--公历闰年
function GregorianIsLeapYear(year)
if year%4 ~= 0 then
return 0
end
if year%100 ~= 0 then
return 1
end
if year%400 == 0 then
return 1
end
return 0
end
function GetYearInfo(lunarYear,index)
if lunarYear < 1901 or lunarYear > 2100 then
return
end
lunarYear=lunarYear+1
index=index+1
return DateLunarInfo[lunarYear- 1901][index]
end
--此处获取农历的代码来自博客
--https://blog.csdn.net/BlueMustard/article/details/120907984
------------------------------------------------------------------------------------
date_y=os.date("%Y") --取年
date_y= tonumber(date_y)
date_m=os.date("%m") --取月
date_m= tonumber(date_m)
date_d=os.date("%d") --取日
date_d= tonumber(date_d)
nLYear,nLMonth,nLDay,nLDate =GregorianToLunar(date_y,date_m,date_d)
nLYear,nLMonth,nLDay,nLDate =GregorianToLunar(date_y,date_m,date_d)
date1=nLDate
date2=nLYear.."年"..nLMonth.."月"..nLDay.."日"
---------------------------------------------------------------------------------
--农历
local function translator(input, seg)
if (input == "lunar") then
yield(Candidate("date", seg.start, seg._end, date1, " "))
yield(Candidate("date", seg.start, seg._end, date2, " "))
end
end
return translator
此处代码用lua语言编写而成,若有一定语言基础,根据自己的需求调整响应代码。
③在用户配置文件中开启(*.schema.yaml文件)
#若你的配置文件中有engine/translator,则后面直接加入代码
- lua_translator@lunar_translator
#若你的配置文件中无engine/translator项,则加入
engine/+:
translators/+:
- lua_translator@lunar_translator
#此处@后面的名称必需与rime.lua文件中的定义名称一致
全时间
此处配置获取当前全时间,定义的关键字是allt,效果如下:
实现如下:①在rime.lua文件加入如下代码
alltime_translator = require("alltime")
②在文件夹Lua中新建文件alltime.lua(此处的文件名必需与上文require中的内容相同),加入如下lua代码:
--lua语言中的注释用“--”
--**********************************************************************************
local function translator(input, seg)
if (input == "allt"or input == "time") then
------------------------------------------------------------------------------------
--星期 day_w1="星期日" day_w2="Sunday" day_w3="Sun."
local day_w=os.date("%w")
local day_w1=""
local day_w2=""
local day_w3=""
if day_w=="0" then
day_w1="星期日"
day_w2="Sunday"
day_w3="Sun."
end
if day_w=="1" then
day_w1="星期一"
day_w2="Monday"
day_w3="Mon."
end
if day_w=="2" then
day_w1="星期二"
day_w2="Tuesday"
day_w3="Tues."
end
if day_w=="3" then
day_w1="星期三"
day_w2="Wednesday"
day_w3="Wed."
end
if day_w=="4" then
day_w1="星期四"
day_w2="Thursday"
day_w3="Thur."
end
if day_w=="5" then
day_w1="星期五"
day_w2="Friday"
day_w3="Fri."
end
if day_w=="6" then
day_w1="星期六"
day_w2="Saturday"
day_w3="Sat."
end
------------------------------------------------------------------------------------
--普通日期1,类似2020年02月04日
date_0=os.date("%Y/%m/%d")
date_1=os.date("%Y-%m-%d")
date_y0=os.date("%Y") --取年
date_m0=os.date("%m") --取月
date_d0=os.date("%d") --取日
--去零日和月tostring(num_m1) tostring(num_d1)
num_m=os.date("%m")+0
num_m1=math.modf(num_m)
num_d=os.date("%d")+0
num_d1=math.modf(num_d)
date_y2=os.date("%Y") --取年
date_m2=tostring(num_m1) --取月
date_d2=tostring(num_d1) --取日
date_2=os.date("%Y年")..tostring(num_m1).."月"..tostring(num_d1).."日"
------------------------------------------------------------------------------------------------------
--英文日期 date_m1="Jan." date_m2="January" symbal
local date_d=os.date("%d")
local date_m=os.date("%m")
local date_y=os.date("%Y")
local date_m1=""
local date_m2=""
if date_m=="01" then
date_m1="Jan."
date_m2="January"
end
if date_m=="02" then
date_m1="Feb."
date_m2="February"
end
if date_m=="03" then
date_m1="Mar."
date_m2="March"
end
if date_m=="04" then
date_m1="Apr."
date_m2="April"
end
if date_m=="05" then
date_m1="May."
date_m2="May"
end
if date_m=="06" then
date_m1="Jun."
date_m2="June"
end
if date_m=="07" then
date_m1="Jul."
date_m2="July"
end
if date_m=="08" then
date_m1="Aug."
date_m2="August"
end
if date_m=="09" then
date_m1="Sept."
date_m2="September"
end
if date_m=="10" then
date_m1="Oct."
date_m2="October"
end
if date_m=="11" then
date_m1="Nov."
date_m2="November"
end
if date_m=="12" then
date_m1="Dec."
date_m2="December"
end
if date_d=="0" then
symbal="st"
elseif date_d=="1" then
symbal="nd"
elseif date_d=="2" then
symbal="rd"
else
symbal="th"
end
date_4=date_m1..""..date_d..symbal..","..date_y
date_5=date_m2.." "..date_d..symbal..","..date_y
----------------------------------------------------------------------------
--时间
date_t1=os.date("%H:%M")
date_t2=os.date("%H点%M分")
date_t3=os.date("%H:%M:%S")
date_t4=os.date("%H点%M分%S秒")
-----------------------------------------------------------------------
date1=day_w3.." "..date_m1.." "..date_d..symbal..", "..date_t3..", "..date_y
date2=date_1.." "..date_t3
date3=date_2.." "..day_w1.." "..date_t4
yield(Candidate("date", seg.start, seg._end, date1, " "))
yield(Candidate("date", seg.start, seg._end, date2, " "))
yield(Candidate("date", seg.start, seg._end, date3, " "))
end
end
------------------------------------------------------------------------------------
return translator
③在用户配置文件中开启(*.schema.yaml文件)
#若你的配置文件中有engine/translator,则后面直接加入代码
- lua_translator@alltime_translator
#若你的配置文件中无engine/translator项,则加入
engine/+:
translators/+:
- lua_translator@alltime_translator
#此处@后面的名称必需与rime.lua文件中的定义名称一致
数字大写
此处配置数字大写转换,定义关键字为大写字母D,再输入数字即可实现数字大写,效果如下:
实现如下:①在rime.lua文件加入如下代码
number2_translator = require("number2")
②在文件夹Lua中新建文件number2.lua(此处的文件名必需与上文require中的内容相同),加入如下lua代码:
--lua语言中的注释用“--”
--此处数字大写的代码参考
--https://wubi98.gitee.io/categories/%E5%B0%8F%E7%8B%BC%E6%AF%AB/
local function splitNumPart(str)
local part = {}
part.int, part.dot, part.dec = string.match(str, "^(%d*)(%.?)(%d*)")
return part
end
local function GetPreciseDecimal(nNum, n)
if type(nNum) ~= "number" then nNum =tonumber(nNum) end
n = n or 0;
n = math.floor(n)
if n < 0 then n = 0 end
local nDecimal = 10 ^ n
local nTemp = math.floor(nNum * nDecimal);
local nRet = nTemp / nDecimal;
return nRet;
end
local function decimal_func(str, posMap, valMap)
local dec
posMap = posMap or {[1]="角"; [2]="分"; [3]="厘"; [4]="毫"}
valMap = valMap or {[0]="零"; "壹"; "贰"; "叁" ;"肆"; "伍"; "陆"; "柒"; "捌"; "玖"}
if #str>4 then dec = string.sub(tostring(str), 1, 4) else dec =tostring(str) end
dec = string.gsub(dec, "0+$", "")
if dec == "" then return "整" end
local result = ""
for pos =1, #dec do
local val = tonumber(string.sub(dec, pos, pos))
if val~=0 then result = result .. valMap[val] .. posMap[pos] else result = result .. valMap[val] end
end
result=result:gsub(valMap[0]..valMap[0] ,valMap[0])
return result:gsub(valMap[0]..valMap[0] ,valMap[0])
end
-- 把数字串按千分位四位数分割,进行转换为中文
local function formatNum(num,t)
local digitUnit,wordFigure
local result=""
num=tostring(num)
if tonumber(t) < 1 then digitUnit = {"", "十", "百","千"} else digitUnit = {"","拾","佰","仟"} end
if tonumber(t) <1 then
wordFigure = {"〇","一","二","三","四","五","六","七","八","九"}
else wordFigure = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"} end
if string.len(num)>4 or tonumber(num)==0 then return wordFigure[1] end
local lens=string.len(num)
for i=1,lens do
local n=wordFigure[tonumber(string.sub(num,-i,-i))+1]
if n~=wordFigure[1] then result=n .. digitUnit[i] .. result else result=n .. result end
end
result=result:gsub(wordFigure[1]..wordFigure[1] ,wordFigure[1])
result=result:gsub(wordFigure[1].."$","") result=result:gsub(wordFigure[1].."$","")
return result
end
-- 数值转换为中文
function number2cnChar(num,flag,digitUnit,wordFigure) --flag=0中文小写反之为大写
local st,result
num=tostring(num) result=""
local num1,num2=math.modf(num)
if tonumber(num2)==0 then
if tonumber(flag) < 1 then
digitUnit = digitUnit or {[1]="万";[2]="亿"} wordFigure = wordFigure or {[1]="〇"; [2]="一"; [3]="十"; [4]="元"}
else
digitUnit = digitUnit or {[1]="万";[2]="亿"} wordFigure = wordFigure or {[1]="零"; [2]="壹"; [3]="拾"; [4]="元"}
end
local lens=string.len(num1)
if lens<5 then result=formatNum(num1,flag) elseif lens<9 then result=formatNum(string.sub(num1,1,-5),flag) .. digitUnit[1].. formatNum(string.sub(num1,-4,-1),flag)
elseif lens<13 then result=formatNum(string.sub(num1,1,-9),flag) .. digitUnit[2] .. formatNum(string.sub(num1,-8,-5),flag) .. digitUnit[1] .. formatNum(string.sub(num1,-4,-1),flag) else result="" end
result=result:gsub("^" .. wordFigure[1],"") result=result:gsub(wordFigure[1] .. digitUnit[1],"") result=result:gsub(wordFigure[1] .. digitUnit[2],"")
result=result:gsub(wordFigure[1] .. wordFigure[1],wordFigure[1]) result=result:gsub(wordFigure[1] .. "$","")
if lens>4 then result=result:gsub("^"..wordFigure[2].. wordFigure[3],wordFigure[3]) end
if result~="" then result=result .. wordFigure[4] else result="数值超限!" end
else return "数值超限!" end
return result
end
local function number2zh(num,t)
local result,wordFigure
result=""
if tonumber(t) <1 then
wordFigure = {"〇","一","二","三","四","五","六","七","八","九"}
else wordFigure = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"} end
if tostring(num)==nil then return "" end
for pos=1,string.len(num) do
result=result..wordFigure[tonumber(string.sub(num, pos, pos)+1)]
end
result=result:gsub(wordFigure[1] .. wordFigure[1],wordFigure[1])
return result:gsub(wordFigure[1] .. wordFigure[1],wordFigure[1])
end
function number_translatorFunc(num)
local numberPart=splitNumPart(num)
local result={}
if numberPart.dot~="" then
table.insert(result,{number2cnChar(numberPart.int,0,{"万", "亿"},{"〇","一","十","点"})..number2zh(numberPart.dec,0),""})
table.insert(result,{number2cnChar(numberPart.int,1,{"萬", "億"},{"〇","一","十","点"})..number2zh(numberPart.dec,1),""})
-- table.insert(result,{number2cnChar(numberPart.int,1,{"萬", "億"},{"〇","一","十","点"})..number2zh(numberPart.dec,1),"〔大写〕"})
else
table.insert(result,{number2cnChar(numberPart.int,0,{"万", "亿"},{"〇","一","十",""}),""})
table.insert(result,{number2cnChar(numberPart.int,1,{"萬", "億"},{"零","壹","拾",""}),""})
end
table.insert(result,{number2cnChar(numberPart.int,1)..decimal_func(numberPart.dec,{[1]="角"; [2]="分"; [3]="厘"; [4]="毫"},{[0]="零"; "壹"; "贰"; "叁" ;"肆"; "伍"; "陆"; "柒"; "捌"; "玖"}),""})
table.insert(result,{number2cnChar(numberPart.int,0)..decimal_func(numberPart.dec,{[1]="角"; [2]="分"; [3]="厘"; [4]="毫"},{[0]="〇"; "一"; "二"; "三" ;"四"; "五"; "六"; "七"; "八"; "九"}),""})
return result
end
--以上代码参考https://wubi98.gitee.io/categories/%E5%B0%8F%E7%8B%BC%E6%AF%AB/
------------------------------------------------------------------------------------
function translator(input, seg)
local str,num,numberPart
if string.match(input,"^(D+%d+)(%.?)(%d*)$")~=nil then
str = string.gsub(input,"^(%a+)", "") numberPart=number_translatorFunc(str)
if #numberPart>0 then
for i=1,#numberPart do
yield(Candidate(input, seg.start, seg._end, numberPart[i][1],numberPart[i][2]))
end
end
end
end
return translator
③在用户配置文件中开启(*.schema.yaml文件)
#若你的配置文件中有engine/translator,则后面直接加入代码
- lua_translator@number2_translator
#若你的配置文件中无engine/translator项,则加入
engine/+:
translators/+:
- lua_translator@number2_translator
#此处@后面的名称必需与rime.lua文件中的定义名称一致