rime中州韵小狼毫 help lua Translator 帮助消息翻译器
lua
是 Rime
中州韵/小狼毫输入法强大的武器,掌握如何在Rime
中州韵/小狼毫中使用lua
,你将体验到什么叫 随心所欲。
先看效果
在 rime中州韵 输入效果一览 中的 👇 help效果 一节中, 我们看到了在Rime
中州韵/小狼毫输入法中输入 help
时,输入法会展示出如下👇的候选项效果:
这个效果是如何出来的呢? 我们在 rime中州韵小狼毫 自定义词典 一文中介绍过 自定义词典,所以最直观的解决方案是,我们在用户词典中加入对应的自定义词条,然后 重新部署 即可。
这个想法是正确的,如果在我们的自定义词典 (此处以 Custom_phrase.txt
为例)加入以下👇自定义词条,亦可现实同样的效果:
lua version: Lua 5.4 help
特殊符号-->/help help
latexLetters-->uzalph help
但是,本文并不打算对比在实现同样效果时,自定义词典和lua
脚本两种方案孰优孰劣,仅为讲解如何通过lua
脚本的方案在Rime
中州韵/小狼毫输入法中如何实现这个help
的效果。
Translator
在Rime
输入法中,有两个概念非常重要,一个是Translator
, 一个是Filter
。
在👆上图中,展示了Rime
输入法中的Translator
和Filter
的大致工作流程:Rime
引擎捕捉到用户的键盘输入字符 ddfb,然后经过一些重要的前端处理(前端处理部分上图没有画出)后,进入Translator
中处理,Translator
将字符 ddfb 翻译成词条 大地。然后把Translator
生成的候选词送入Filter
中处理,Filter
对Translator
生成的候选词逐一进行处理,丰富了候选词的信息(在上图的例子中,为候选词大地进行了注音),同时增加了一个新的候选词母亲。经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语言中的注释用“--”
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文件夹哦),如下👇:
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
候选项效果。
相关文章:

rime中州韵小狼毫 help lua Translator 帮助消息翻译器
lua 是 Rime中州韵/小狼毫输入法强大的武器,掌握如何在Rime中州韵/小狼毫中使用lua,你将体验到什么叫 随心所欲。 先看效果 在 rime中州韵 输入效果一览 中的 👇 help效果 一节中, 我们看到了在Rime中州韵/小狼毫输入法中输入 h…...

C++完成使用map Update数据 二进制数据
1、在LXMysql.h和LXMysql.cpp分别定义和编写关于pin语句的代码 //获取更新数据的sql语句 where语句中用户要包含where 更新std::string GetUpdatesql(XDATA kv, std::string table, std::string where); std::string LXMysql::GetUpdatesql(XDATA kv, std::string table, std…...

ARCGIS PRO SDK 访问Geometry对象
一、Geometry常用对象 二、主要类 1、ReadOnlyPartCollection:Polyline 和 Polygon 使用的 ReadOnlySegmentCollection 部件的只读集合,属性成员: 名字描述Count获取 ICollection 中包含的元素数。TIEM获取位于指定索引处的元素。Spatial…...

数据结构之各大排序(C语言版)
我们这里话不多说,排序重要性大家都很清楚,所以我们直接开始。 我们就按照这张图来一一实现吧! 一.直接插入排序与希尔排序. 这个是我之前写过的内容了,大家可以通过链接去看看详细内容。 算法之插入排序及希尔排序(…...
c++ 中多线程的使用
如果你的其他逻辑必须在线程 t1 和 t2 之后执行,但你又希望这些线程能够同时运行,你可以在主线程中使用 std::thread::detach 将线程分离,让它们在后台运行。这样,主线程不会等待这些线程的完成,而可以继续执行其他逻辑…...

理解二叉树的遍历(算法村第七关白银挑战)
二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]解 LeetCode以及面试中提供的方法可能…...

所有单片机使用的汇编语言是统一的吗?
所有单片机使用的汇编语言是统一的吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&…...

C ++类
定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算…...

STM32疑难杂症
1.keil的奇怪问题 创建的数组分配内存到0x10000000地址的时候,数据总是莫名其妙的出现问题,取消勾选就正常了 stm32f407内部有一个CCM内存,这部分内存只能由内核控制,任何外设都不能够进行访问。这样问题就来了,如果使…...
GIT使用简介
Git 是一种版本控制系统,常用于团队协作开发和管理代码。下面是 Git 的基本使用方式: 安装 Git:首先,在你的计算机上安装 Git。你可以从 Git 官方网站(https://git-scm.com/)下载适合你操作系统的版本&…...
easycode 插件配置文件
easycode是一个idea生成文件的插件,以下是我的一个项目中配置信息,需要的可以拿走,保存成json文件导入即可 {"author" : "XXX","version" : "1.2.8","userSecure" : "","…...

elasticsearch系列四:集群常规运维
概述 在使用es中如果遇到了集群不可写入或者部分索引状态unassigned,明明写入了很多数据但是查不到等等系列问题该怎么办呢?咱们今天一起看下常用运维命令。 案例 起初我们es性能还跟得上,随着业务发展壮大,发现查询性能越来越不…...
6.6 会话与输入事件(三)
三,Pointer会话 3.1 Pointer会话及其属性 指针输入会话使用SCREEN_EVENT_POINTER类型创建,通常用于控制光标的形状和位置。 指针会话的SCREEN_PROPERTY_MODE属性未使用。但是,可以使用下面的会话属性配置指针会话: SCREEN_PROPERTY_ACCELERATION表示一组六个整数,表示x…...

【自动化测试总结】优点、场景、流程、项目人员构成
一、自动化测试的概念 以程序测试程序,以代码代替思维,以脚本的运行代替手工测试,可以大大提高工作测试的效率。 二、自动化测试的优点 1.回归测试更为方便,可靠。自动化测试最主要的任务和特点,特别是在程序修改比较…...

杨中科 ASP.NETCore Rest
什么是Rest RPC 1、Web API两种风格: 面向过程(RPC) 、面向REST (REST) 2、RPC:“控制器/操作方法“的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道,不关心HTTP谓词。通过QueryString请求报文体给服务器传递数据。状态码。比如/Persons/GetAll…...

RTU数据采集终端
在现代工业控制系统中,数据采集是一个至关重要的步骤。RTU(远程终端单元)作为一种常用的数据采集终端设备,不仅可以实现数据的采集和传输,还可以实现现场设备的远程监控和控制。 一、RTU数据采集终端的工作原理 RTU数据采集终端是一种将现场…...
双指针--- 数组元素的目标和
目录 数组元素的目标和思路:暴力做法思路:双指针做法: 代码: 原题链接 数组元素的目标和 给定两个升序排序的有序数组 A 和 B ,以及一个目标值 x 。 数组下标从 0 开始。 请你求出满足 A[i]B[j]x 的数对 (i,j) 。 数据保证有唯…...

你的网站或许不需要前端构建(二)
前一阵,有朋友问我,能否在不进行前端编译构建的情况下,用现代语法开发网站界面。 于是,就有了这篇文章中提到的方案。 写在前面 这篇文章,依旧不想讨论构建或不构建,哪一种方案对开发更友好,…...

flutter 使用adb 同时连接 多个模拟器
MUMU模拟器 MuMu模拟器官网_安卓12模拟器_网易手游模拟器 传统只需要 连接一个 默认命令是 默认端口是7555 adb connect 127.0.0.1:7555 但是需要同时连接调试多个模拟器的时候 就需要连接多个 这里可以使用自带的多开 多开后 使用 1 是对应多开的序号 这样就可以查看对…...

网络四元组
文章目录 网络四元组 今天我们来聊聊 网络四元组 网络四元组 四元组,简单理解就是在 TCP 协议中,去确定一个客户端连接的组成要素,它包括源 IP 地址、目标 IP 地址、源端口号、目标端口号。 正常情况下,我们对于网络通信的认识可…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...