rime中州韵 help lua Translator

luaRime中州韵/小狼毫输入法强大的武器,掌握如何在Rime中州韵/小狼毫中使用lua,你将体验到什么叫 随心所欲

先看效果

rime中州韵 输入效果一览 中的 👇 help效果 一节中, 我们看到了在Rime中州韵/小狼毫输入法中输入 help 时,输入法会展示出如下👇的候选项效果:

这个效果是如何出来的呢? 我们在 rime中州韵 自定义词典 一文中介绍过 自定义词典 ,所以最直观的解决方案是,我们在用户词典中加入对应的自定义词条,然后 重新部署 即可。

这个想法是正确的,如果在我们的自定义词典 (此处以 Custom_phrase.txt 为例)加入以下👇自定义词条,亦可现实同样的效果:

txt 复制代码
lua version: Lua 5.4	help
特殊符号-->/help	help
latexLetters-->uzalph	help

但是,本文并不打算对比在实现同样效果时,自定义词典lua脚本两种方案孰优孰劣,仅为讲解如何通过lua脚本的方案在Rime中州韵/小狼毫输入法中如何实现这个help的效果。

Translator

Rime输入法中,有两个概念非常重要,一个是Translator, 一个是Filter

在👆上图中,展示了Rime输入法中的TranslatorFilter的大致工作流程:Rime引擎捕捉到用户的键盘输入字符 ddfb ,然后经过一些重要的前端处理(前端处理部分上图没有画出)后,进入Translator中处理,Translator将字符 ddfb 翻译成词条 大地 。然后把Translator生成的候选词送入Filter中处理,FilterTranslator生成的候选词逐一进行处理,丰富了候选词的信息(在上图的例子中,为候选词大地 进行了注音),同时增加了一个新的候选词母亲 。经Filter处理完成后的候选词,以及Filter生成的新的候选词,做为最终的候选词选项提供给用户进行选择使用。

本文中,我们将重点讲解如何定义一个Translator处理器。

help.lua

一般来说,根据你需要实现的功能,我们为我们的lua脚本拟定一个名字,今天我们所要实现的功能是实现 help 候选项,所以我们把我们的lua脚本命名为 help.lua

👇如下,我们的help.lua脚本,应该放置于 用户文件夹 下的 lua 子文件夹内,所以如果你的 用户文件夹 内没有 lua 文件夹,请创建 lua 文件夹,然后将你的 help.lua 文档放在此 lua 文件夹内。

help.lua脚本内,以下的脚本结构中,我们定义了一个函数/方法,这个方法名为 translator(名称不限,也可以是其它的名字),这个 translator 方法内部定义了具体的 translator 逻辑。在脚本的最后一行,我们通过 return 关键字抛出了translator方法。这样我们就可以在rime引擎中调用该translator方法实现具体的处理逻辑。

lua 复制代码
--lua语言中的注释用"--" 
function translator(input, seg)
    --这里定义 translator 逻辑,例如如果看到 input == ddfb, 则给出候选项 大地
end

return translator

👇以下是help.lua的具体代码:

lua 复制代码
--lua语言中的注释用"--" 
function translator(input, seg)
	if (input == "/help") then
		yield(Candidate("help", seg.start, seg._end, "带圈汉字/数字/字母-->/hzq/szq/zmq", " "))
		yield(Candidate("help", seg.start, seg._end, "符号/记号/箭头/雪花/表情-->/fh/jh/jt/xh/bq", " "))
		yield(Candidate("help", seg.start, seg._end, "数学/数字名/音乐/分数/电脑-->/sx/szm/yy/fs/dn", " "))
		yield(Candidate("help", seg.start, seg._end, "方块/麻将/象棋/色子/扑克-->/fk/mj/xq/sz/pk", " "))
		yield(Candidate("help", seg.start, seg._end, "单位/货币/偏旁-->/dw/hb/pp", " "))
		yield(Candidate("help", seg.start, seg._end, "标点/下标/竖标点-->/bd/xb/bdz", " "))
		yield(Candidate("help", seg.start, seg._end, "希腊字符/大写-->/xl/xld", " "))
		yield(Candidate("help", seg.start, seg._end, "罗马数字/大写-->/lm/lmd", " "))
		yield(Candidate("help", seg.start, seg._end, "天干/地支/干支-->/tg/dz/gz", " "))
		yield(Candidate("help", seg.start, seg._end, "八卦-->/bg/bgm/txj", " "))
		yield(Candidate("help", seg.start, seg._end, "星座/名-->/xz/xzm/seg", " "))
		yield(Candidate("help", seg.start, seg._end, "节气/天气-->/jq/tq", " "))
		yield(Candidate("help", seg.start, seg._end, "数字/字母-->/123/abc...", " "))
		yield(Candidate("help", seg.start, seg._end, "状态/推荐/进度/对错-->/zt/tj/jd/dc", " "))
	elseif (input == "help") then
		yield(Candidate("help", seg.start, seg._end, "lua version: ".._VERSION, " "))
		yield(Candidate("help", seg.start, seg._end, "特殊符号-->/help", " "))
		yield(Candidate("help", seg.start, seg._end, "latexLetters-->uzalph", " "))
		--yield(Candidate("help", seg.start, seg._end, "", " "))
		--yield(Candidate("help", seg.start, seg._end, "", " "))
		--yield(Candidate("help", seg.start, seg._end, "", " "))
	end
end

return translator

rime.lua

上文中我们完成了 help.lua 文档中脚本的定义。但是仅仅是一个脚本,是没有办法与 rime 引擎联动的,我们还需要一个 rime.lua 的脚本负责将我们定义的 help.lua 脚本中的 translator 映射成 rime 可以引用的方法接口,以下👇是 rime.lua 文档内的脚本内容:

lua 复制代码
help_translator = require("help")

👆上述脚本中,= 左边的 help_translator 就是映射出来的可以在 rime 引擎中使用的 translator 接口,这个接口将在下文中被我们引用;= 右边的 require 方法内的参数 help 则是我们上文所定义的 help.lua 文档的名字。也就是说,在rime.lua脚本中,require方法所引用的是,是lua 文件夹内的lua脚本文档的名字(文档名)。

rime.lua 与其它的 lua 文档不一样,rime.lua 文档需要放在 用户文件夹 内(不是lua 文件夹哦),如下👇:

wubi_pinyin.custom.yaml

👆上文中,我们通过 help.lua 脚本文档定义并返回了一个translator方法,然后通过rime.lua脚本文档将help.lua中所定义的translator方法映射成translator接口help_translator。那么这个映射出来的help_translator接口应该如何使用呢?

显然,我们应该在我们的输入方案中引用并使用这个help_translator接口,以五笔・拼音 输入方案为例, 我们需要在五笔・拼音 输入方案的方案文档wubi_pinyin.schema.yaml的补丁文档wubi_pinyin.custom.yaml中来引用help_translator接口。我们在wubi_pinyin.custom.yaml文档中增加一个translator的引用,如下👇:

我们修改并保存wubi_pinyin.custom.yaml文档后,请记得重新部署 rime输入引擎,则rime输入引擎就会在我们所定义的输入方案(此处为五笔・拼音 )中引用所定义的 help_translator 翻译器,从而实现help.lua脚本中所定义的候选词生成功能,效果如下👇:

help.lua 文档

👆以上所述 help.lua脚本,你也可以在 help.lua 下载取用。

rime.lua 文档

👆以上所述 rime.lua 脚本,你也可以在 rime.lua 下载取用。

wubi_pinyin.custom.yaml 文档

👆以上所述 wubi_pinyin.custom.yaml 文档,你也可以在 wubi_pinyin.custom.yaml 下载取胜。

小结

以上就是本文所带来的分享,文章主要讲解并实现了一个简单的 help_translator 翻译器,该 help_translator 翻译器通过 help.lua 文档实现,然后通过 rime.lua 文档实现了脚本函数到 help_translator 接口的转换映射,最后我们以五笔・拼音 输入方案为例,在五笔・拼音 输入方案文档 wubi_pinyin.schema.yaml 的补丁文档 wubi_pinyin.custom.yaml 中引用并使用了 help_translator 翻译器,最终我们实现了我们想要的 help 候选项效果。

相关推荐
cominglately7 分钟前
centos单机部署seata
linux·运维·centos
魏 无羡9 分钟前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse13 分钟前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
唐宋元明清218844 分钟前
.NET 阻止系统睡眠/息屏
windows·电源
木子Linux1 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.8241 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
鹏大师运维1 小时前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
watermelonoops1 小时前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
滴水之功2 小时前
VMware OpenWrt怎么桥接模式联网
linux·openwrt
黄名富2 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua