rime中州韵小狼毫 help lua Translator 帮助消息翻译器

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

先看效果

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

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

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

lua version: Lua 5.4	help
特殊符号-->/help	help
latexLetters-->uzalph	help

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

Translator

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

20240101191010
在👆上图中,展示了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 文件夹内。
20240101194146

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

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

return translator

👇以下是help.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 文档内的脚本内容:

help_translator = require("help")

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

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

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的引用,如下👇:
20240101212626

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

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 候选项效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/292842.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「解析」Windows 如何优雅使用 Terminal

所谓工欲善其事必先利其器,对于开发人员 Linux可能是首选,但是在家学习的时候,我还是更喜欢使用 Windows系统,首先是稳定,其次是习惯了。当然了,我还有一台专门安装 Linux系统的小主机用于学习Linux使用&am…

解决在test以外的目录下导入junit无效

以上引用来自src目录下的文件,可以看到,和junit有关的导入都飘红,但明明junit已经被正确导入进了项目中。 再看右侧的Maven的依赖下方,junit的右边有一个很不起眼的(test) 这是因为junit作为测试框架,可能包含仅适用于…

整除判断-判断正整数a能否被b整除,如果不能整除,输出商和余数 C语言xdoj42

问题描述 判断正整数a能否被b整除&#xff0c;如果不能整除&#xff0c;输出商和余数 输入说明 输入两个正整数a和b&#xff08;0<a, b<10000&#xff09;&#xff0c;a和b之间用空格分隔。 输出说明 如果a能被b整除&#xff0c;输出yes&#xff0c;否则在同…

mysql四大引擎、账号管理以及建库

目录 一.数据库存储引擎1.1存储引擎的查看1.2InnoDB1.3MyISAM1.4 MEMORY1.5 Archive 二.数据库管理2.1元数据库分类2.2 操作2.3 MySQL库 三.数据表管理3.1三大范式3.2 整形3.3 实数3.4 字符串3.5 text&blob3.6 日期类型3.7 选中标识符 四.数据库账号管理4.1 查询用户4.2查看…

锂电池寿命预测 | Matlab基于LSTM长短期记忆神经网络的锂电池寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于LSTM长短期记忆神经网络的锂电池寿命预测 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复Matlab基于LSTM长短期记忆神经网络的锂电池寿命预测。 参考资料 [1] http://t.csdn…

如何使用ArcGIS Pro转换单个点坐标

坐标转换作为基础的功能&#xff0c;一般的GIS软件都支持&#xff0c;大多数情况下&#xff0c;我们是转换整个图层&#xff0c;如果想要转换单个坐标点&#xff0c;在ArcGIS Pro内也是支持的&#xff0c;这里为大家介绍一下转换方法&#xff0c;希望能对你有所帮助。 拾取坐标…

IO进程线程 day4

进程状态间的转化 创建出三个进程完成两个文件之间拷贝工作&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程回收子进程的资源 #include <head.h> int main(int argc, const char *argv[]) {FILE *fp1NULL,*fp2NULL;//定义两个文…

微信小程序:flex布局实现换行

1、关键代码.wxml&#xff1a; <view class"pay margin-top-40"><view class"info"><view class"pay-info-title margin-left-22 flex-start"> 请选择充值金额</view><view class"flex-wrap margin-top-20&quo…

【ZYNQ实验】第一篇、ZYNQ驱动HDMI显示图片

目录 第一部分、实验说明 1、点名过来看 2、实验说明 2.1、涉及到的知识 2.2、使用的硬件 3、测试效果 3.1、实验一效果 3.2、实验二效果 4、写在前面 5、参考文献 第二部分、硬件搭建 第三部分、实现方法 1、实验一 1.1、实验一原理图 1.2、MATLAB图片转换代码…

包含自动轮播、点击切换、显示图片信息和页码方框显示码数的 HTML 和 JavaScript 示例:

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>轮播图</title><style>#carousel-conta…

企业微信开发:自建应用:获取企业微信IP段(用于防火墙配置)

概述 在企业微信开发流程中&#xff0c;为了确保与企业微信API的网络通信安全&#xff0c;并适应防火墙配置要求&#xff0c;开发者需要获取企业微信API服务的IP地址范围。这样&#xff0c;仅允许与企业微信官方通信的合法请求通过防火墙&#xff0c;从而保障数据传输的安全性…

【K8S 云原生】Pod资源限制、Pod容器健康检查(探针)

目录 一、docker的重启方式和K8S重启方式 1、Pod的重启方式&#xff1a; 2、docker的重启策略&#xff1a; 二、yaml文件快速生成&#xff1a; 三、pod的状态&#xff1a; 四、Pod的资源限制 1、限制的方式和种类 2、CPU的限制的格式&#xff1a; 五、K8S拉取镜像的策…

ASP.NET Core路由中间件[1]: 终结点与URL的映射

一、路由注册 我们演示的这个ASP.NET Core应用是一个简易版的天气预报站点。如果用户希望获取某个城市在未来N天之内的天气信息&#xff0c;他可以直接利用浏览器发送一个GET请求并将对应城市&#xff08;采用电话区号表示&#xff09;和天数设置在URL中。如下图所示&#xff…

ARM Cortex-Mx 权威指南笔记

用于中断或异常屏蔽特殊寄存器细节 1、PRIMASK 在许多应用中,可能都需要暂时禁止所有中断以执行一些时序关键的任务&#xff0c;此时可以使用PRIMASK寄存器。PRIMASK寄存器只能在特权状态访问。PRIMASK 用于禁止除NMI和 HardFault 外的所有异常它实际上是将当前优先级改为0(最…

Git 对项目更新的时候提示错误 repository not owned by current user

遇到 Git 提示的错误信息为&#xff1a;repository not owned by current user 上图显示的是错误的信息。 问题和解决 出现上面错误信息的原因是当前文件夹的权限和 Git 的执行权限不一直导致的。 我们的问题是我们希望在网盘上使用 Git 更新克隆后的代码&#xff0c;但登录…

Dockerfile语法和简单镜像构建

Dockerfile是一个用于定义Docker镜像的文本文件&#xff0c;包含了一系列的指令和参数&#xff0c;用于指示Docker在构建镜像时应该执行哪些操作&#xff0c;例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等。 Dockerfile文件的内容主要有几个部分组成&#xff0c…

pyparamvalidate 项目背景和需求分析

目录 一、前置说明1、总体目录2、本节目标 二、项目背景三、需求分析三、后置说明1、要点小结2、下节预告 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、本节目标 阐述 pyparamvalidate 项目背景和需求分析。 二、项目背景…

设计模式学习

面向对象有两个思维模型&#xff1a; 底层思维&#xff1a;向下&#xff0c;如何把握机器底层从微观理解对象构造&#xff0c;封装、继承、多态抽象思维&#xff1a;向上&#xff0c;如何将我们周围世界抽象为程序代码&#xff0c;包括面向对象、组件封装、设计模式、架构模式…

React Hook 原理,及如何使用Hook

一、 Hook使用规则 只在最顶层使用Hook 不要在循环&#xff0c;条件或嵌套函数中调用Hook&#xff1b; 只在组件函数和自定义hook中调用Hook Q1 &#xff1a; 为什么 hook 不能 在循环&#xff0c;条件或嵌套函数中调用Hook &#xff1f; A1&#xff1a; 因为这跟React的…

搜索二维矩阵 II(LeetCode 240)

1.问题描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10…
最新文章