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, 则给出候选项 大地
endreturn translator

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

--lua语言中的注释用“--” 
function translator(input, seg)if (input == "/help") thenyield(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") thenyield(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
endreturn 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.mzph.cn/news/590103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cpu优化方法

如何看谁拉高了cpu? cpu高的时候有没有抓到进程threadtop,从threadtop找到top 3线程和正常场景对比一下就知道是否有异常对明显有异常的线程,看下是否抓到simplerperf trace或systrace,从trace中找到高频调用栈是否异常如果没有…

常见位运算模板方法总结(包含五道例题)

哈喽大家好&#xff0c;今天博主给大家带来算法基础常见位运算的模板&#xff0c;可以说大家遇到的百分之九十与位运算有关的题都可以用得上。话不多上我们上干货&#xff1a; 一.基础位运算符 << 左移运算符 >> 右移运算符 ~ 取反 & 与运算 | …

【Linux--多线程同步与互斥】

目录 一、线程互斥1.1相关概念介绍1.2互斥量mutex1.3互斥量接口1.3.1初始化互斥量1.3.2销毁互斥量1.3.3互斥量加锁1.3.4互斥量解锁1.3.5使用互斥量解决上面分苹果问题 1.4互斥原理 二、可重入与线程安全2.1相关概念2.2常见线程不安全的情况2.3常见不可重入的情况2.4 可重入与线…

PiflowX组件-JDBCWrite

JDBCWrite组件 组件说明 使用JDBC驱动向任意类型的关系型数据库写入数据。 计算引擎 flink 有界性 Sink: Batch Sink: Streaming Append & Upsert Mode 组件分组 Jdbc 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默…

获奖、买房、出课、维权、购车,我的2023年度总结。

时光如水&#xff0c;岁月如梭。一个典型的小学语文作文的开头。 但是随着年龄的增长&#xff0c;越来越觉得时间过得真的很快啊。转眼间2023年就这么过去了。回看这一年&#xff0c;发现真的做了很多事。 按照惯例&#xff0c;做个总结吧。 获奖 很多人都知道&#xff0c;我去…

百度高级Java面试真题

今年IT寒冬&#xff0c;大厂都裁员或者准备裁员&#xff0c;作为开猿节流主要目标之一&#xff0c;我们更应该时刻保持竞争力。为了抱团取暖&#xff0c;林老师开通了《知识星球》&#xff0c;并邀请我阿里、快手、腾讯等的朋友加入&#xff0c;分享八股文、项目经验、管理经验…

Spring04

一、AOP的概念 AOP 为 (Aspect Oriented Programming) 的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;底层是使用动态代理的技术实现对目标方法的增强和控制访问等功能。 其中AOP中有几个重要的概念: 1、通知:增强的逻辑&#xff0c;或者后期要加入的代码。 2、目…

【js】js解析Token:

一、效果&#xff1a; 二、实现&#xff1a; export function getTokenObject(token) {//通过split()方法将token转为字符串数组,数组中的第二个字符进行解析return token ? JSON.parse(decodeURIComponent(escape(window.atob(token.split(".")[1].replace(/-/g &…

docker Mysql-udf-http

1.Mysql-udf-http镜像已上传到dockerhub中 docker pull heidaodageshiwo/mysql-udf-http:v1 2.启动镜像(默认密码root1234) docker run -tid -p 3306:3306 --namemysql-udf-http --privilegedtrue heidaodageshiwo/mysql-udf-http:v1 3.命令 [rootlocalhost ~]# docker im…

odoo17 | 开发环境设置

前言 开始odoo17开发之前&#xff0c;请先掌握python的基本语法和工具包的使用&#xff0c;以及postgres数据库的安装&#xff0c;和简单的sql使用。以及一些前端的html、css、javascript等前端知识&#xff0c;以及xml、json等数据传输的使用。 本教程同时适用于odoo15-17 …

go语言语法基础

文章目录 前言一、输入和输出常用的字符串格式化符号 二、注释三、Go常用基本语言数据类型数字类型布尔类型字符类型变量与常量数组和切片数组切片 map类型创建map增删改查特别提醒 指针 四、运算符五、条件判断语句if系列switch六、循环语句for循环标准写法死循环while循环do …

Primavera Unifier 项目控制延伸:Phase Gate理论:2/3

阶段Gate的具体内容&#xff1a; 阶段0 根据公司需要和资源现状&#xff0c;决定开展哪些项目。在这个阶段&#xff0c;公司一般需要开展一些脑力风暴或者团队集思广益的活动以获得足够多的点子。一旦团队决定采用某个想法&#xff0c;必须从各个维度去完善它&#xff0c;并使…

【FileZilla的安装与使用(主动与被动模式详解,以及如何利用FileZilla搭建FTP服务器并且进行访问)】

目录 一、FileZilla介绍 1.1 简介 1.2 重要信息和功能 二、FileZilla的安装与使用 2.1 FileZilla服务端安装与配置 2.1.1 安装步骤 2.1.2 新建组 2.1.3 新建用户 2.1.4 新建目录 2.1.5 权限分配 &#xff08;1&#xff09;用户Milk权限分配 &#xff08;2&#xff…

使用 Hyper-V 创建虚拟机

使用 Hyper-V 创建虚拟机 官网教程修改存储目录Hyper-V管理器创建虚拟机启动虚拟机Win10安装教程Press any key to boot from CD or DVD...... 如何使用Windows自带的虚拟机工具来创建虚拟机&#xff0c; 快速创建虚拟机进行学习探讨&#xff0c;如果有环境问题可以立即创建一个…

元旦小礼品:想去面试的时候如何快速打造自己的面试亮点

新年快乐&#xff01; 对于毕业生&#xff0c;或者工作时间不太长的同学来说&#xff0c;面试实习之前写简历是一件很痛苦的事情&#xff0c;特别是简历上没什么亮点&#xff0c;总感觉很心虚。这时候就会发现很多人凡是知道的&#xff0c;叫得上名字的统统写上去。可惜即使通…

VMware之FTP的简介以及搭建使用计算机端口的介绍

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、FTP介绍 1、什么是FTP&#xff1a; 2、FTP适用于以下情况和应用场景&#xff1a; 3、winServer2012搭…

软件测试/测试开发丨Linux 三剑客与管道使用

1、 程序运行环境输入与输出 标准输入 0 read a;echo $a标准输出 1 echo ceshiren.com错误输出 ls not_exist_dir 2、 管道重定向 管道与管道之间可以重定向管道与文件之间可以重定向 echo 11 > /tmp/1 read var </tmp/1错误输出&#xff1a; ls not_exist_dir > /…

ubuntu:beyond compare 4 This license key has been revoked 解决办法

https://www.cnblogs.com/zhibei/p/12095431.html 错误如图所示&#xff1a; 解决办法&#xff1a; &#xff08;1&#xff09;先用find命令找到bcompare所在位置&#xff1a;sudo find /home/ -name *bcompare &#xff08;2&#xff09;进入 /home/whf/.config,删除/bco…

【瞎折腾/3D】无父物体下物体的旋转与移动

目录 说在前面移动World SpaceLocal Space 旋转World SpaceLocal Space 代码 说在前面 测试环境&#xff1a;Microsoft Edge 120.0.2210.91three.js版本&#xff1a;0.160.0其他&#xff1a;本篇文章中只探讨了无父对象下的移动与旋转&#xff0c;有父对象的情况将在下篇文章中…

springboot 接收appsflyer 参数

1、官网登陆&#xff1a;hq1.appsflyer.com a、配置接收请求的地址和需要的事件 配置详情 2、Controller配置接收 RequestMapping(value "/req", method POST)ResponseBodypublic ResData req(RequestBody Map<String, String> map) {String jsonObject J…