rime中州韵小狼毫 inputShow lua Filter 输入字符透传滤镜

2024-01-04 01:28

本文主要是介绍rime中州韵小狼毫 inputShow lua Filter 输入字符透传滤镜,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 rime中州韵小狼毫 inputShow lua Translator 一文中,我们通过 inputShow.lua 定制了 inputShow_translator,这使得我们的输入方案可以将用户输入的字符透传到候选列表中来。如下👇:
20240102151229
👆上图中我们在候选列表中看到了 inputShow_translator 透传过来的字符 Straa,但是这两个透传过来的字符在候选列表中的位置是比较靠后的。

本文中, 我们通过定义一个 inputShow_Filterfilter,用于调整候选词的顺序,以使 inputShow_translator 透传过来的字符处于合理的位置。

Filter

在 rime中州韵 help lua Translator 一文中有提到 TranslatorFilter 的工作顺序。
20240101191010
以上文所示流程,Filer 工作于 Translator 之后,也就是说 Translator 所抛出的候选词列表,是 Filter 工作的输入项。Filter 是很强大的处理器,其功能包括但不限于:

  • 增删选项
  • 调整次序
  • 修饰选项(comment)

inputShow_Filter.lua

我们在 inputShow_Filter.lua 文档中定义我们的 Filter,脚本如下👇:

-- spaceAppending.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
--[[这个脚本,作为filter来用,需要结合inputShow的在translator阶段的处理信息进行工作
--]]
local function _inputShow(input, env)local cands = {}local candsSelflg=falselocal candsInput = {}local inputInfo = {str='',len=0,flg=false,candsCntLimitForLen={15,25}}local candsCnt = 0for cand in input:iter() doif cand.comment == 'inputShowStr' then--这个选项表明了前端的输入编码信息inputInfo.str = string.sub(cand.text,4)inputInfo.len = string.len(inputInfo.str)elseif cand.comment == 'inputShow' then--这是一个转换后需要展示的选项inputInfo.flg = truelocal thisCand = {}thisCand.start = cand.startthisCand._end = cand._endthisCand.text = cand.textthisCand.comment = cand.commenttable.insert(candsInput,cand)candsCnt = candsCnt + 1else--这是一个没有转换的选项table.insert(cands,cand)if string.find(cand.comment,'☯') then--标记选项中存在自造词candsSelflg = trueendcandsCnt = candsCnt + 1endif inputInfo.flg and 0~=inputInfo.len then--如果已经捕获取了inputShow选项--根据输入的编码的长度,判断候选项数量是否已经够用if nil~=inputInfo.candsCntLimitForLen[inputInfo.len] thenif candsCnt >= inputInfo.candsCntLimitForLen[inputInfo.len] thenbreakendendendendif 0==inputInfo.len theninputInfo.flg = falseendlocal candsHasBeenYield=0--下面开始抛出候选项--第一步,如果存在自造词,则先抛出自造词local candsFor2nd = {}for idx=1,#cands doif inputInfo.flg thenif string.find(cands[idx].comment,'☯') thenyield(cands[idx])candsHasBeenYield = candsHasBeenYield + 1elsetable.insert(candsFor2nd,cands[idx])endelse--如果不需要处理 inputShow,则不做处理,进行转存table.insert(candsFor2nd,cands[idx])endend--第二步,把编码完全项抛出,即没有comment(此处指的是编码提示的comment内容)的选项,以供优先选用local candsFor4th = {}for idx=1,#candsFor2nd doif inputInfo.flg thenif candsFor2nd[idx].comment == '' thenyield(candsFor2nd[idx])candsHasBeenYield = candsHasBeenYield + 1elsetable.insert(candsFor4th,candsFor2nd[idx])endelse--如果不需要处理 inputShow,则不做处理,进行转存table.insert(candsFor4th,candsFor2nd[idx])endend--第三步,如果有的话,抛出inputShow的选项for idx=1,#candsInput dolocal thisC = candsInput[idx]--此处的comment是 inputShow,为了不为后续造成干扰,此处需要清除comment内容thisC:get_genuine().comment = ''yield(thisC)candsHasBeenYield = candsHasBeenYield + 1end--第四步,如果还有其它选项,则抛出其它选项for idx=1,#candsFor4th doif nil==inputInfo.candsCntLimitForLen[inputInfo.len] thenyield(candsFor4th[idx])elseif candsHasBeenYield<inputInfo.candsCntLimitForLen[inputInfo.len] thenyield(candsFor4th[idx])elsebreakendcandsHasBeenYield = candsHasBeenYield + 1end
endlocal function inputShow(input, env)--获取debug选项开关状态--local debugSwitchSts = env.engine.context:get_option("debug")_inputShow(input,env)
endreturn inputShow

👆以上的脚本中,我们首先依次读取候选项,根据既定的规则对所读取的候选项进行取舍处理。然后再根据既定的规则次序抛出候选项,从而达到对候选项的 增删调整修饰

inputShow_Filter 文档应该位于 用户文件夹lua 内,如下👇:
20240102155438

rime.lua

在 rime中州韵 help lua Translator 一文中,我们完成 translator 方法的定义后,我们需要在 rime.lua 内把 translator 方法转换为 Translator 接口,以便 rime中州韵小狼毫输入法引擎可以引用 Translator 接口。

同样的,我们在 inputShow_Filter.lua 中完成 Filter 方法的定义后,也需要在 rime.lua 内进行 Filter 方法向 Filter 接口的转换/映射。👇如下,我们在 rime.lua 中进行如下配置:

help_translator = require("help")
inputShow_translator = require("inputShow")
inputShow_Filter = require("inputShow_Filter")

👆以上的配置中,我们把 inputShow_Filter 映射成了 inputShow_Filter

wubi_pinyin.custom.yaml

类比对 translator 的引用,我们同样需要在输入方案中配置引用 Filter,此处以 五笔・拼音 输入方案为例,我们在 wubi_pinyin.custom.yaml 做👇如下的配置:

# encoding:utf-8
patch:engine/translators/+:                         #增加以下translator- lua_translator@inputShow_translator- table_translator@custom_phrase            # 指定使用 custom_phrase 进行输入字符的翻译- lua_translator@help_translatorengine/filters:								# 设置以下filter- simplifier- lua_filter@inputShow_Filter				# 这个过滤器用于在特定场景下,增加候选项- uniquifier								# 过滤重复候选项,依赖 simplifiercustom_phrase:  # 设置用户字/词典dictionary: ""user_dict: Custom_phrase  # 指向 Custom_phrase.txt 文档db_class: stabledbenable_completion: falseenable_sentence: trueinitial_quality: 1punctuator:  # 设置标点符号集import_preset: symbols# 设置以下 translator 相关的开关translator/enable_sentence: true          #是否整句连打translator/enable_user_dict: true         #开启用户词典translator/enable_encoder: true           #是否自动造词translator/encode_commit_history: false 	#对已上屏的内容整合成词条,看需求translator/max_phrase_length: 4          	#自动造词的最长字数translator/enable_completion: true  		#编码逐渐提示开关;编码提示

👆以上配置中,请注意观察 engine/filters 节点下的内容,我们在这个节点内增加了 inputShow_Filter

效果欣赏

当我们完成以上配置后,重新部署 rime中州韵小狼毫,则我们即可以观察到我们所配置的 inputShow_Filter 的效果,如下👇:
20240102174527
👆上图中,我们可以观察到,透传的字符 abip 都排到了较前的位置,同时这些字符中的 comment 内容(例如 inputShow, inputShowStr)被移除。这些处理结果,为下一步更丰富强大功能提供了基础。

inputShow_Filter.lua/rime.lua/wubi_pinyin.custom.yaml 文档

👆以上所述 inputShow_Filter.luarime.luawubi_pinyin.custom.yaml 文档,你也可以在 inputShow.zip 下载取胜。

小结

以上就是今天分享的在 rime 中州韵小狼毫输入中配置 inputShow_Filter 的方法。并以此为样例演示了如何定义一个基础的 Filter,并在 rime.lua 中完成接口映射,然后在输入方案文档 wubi_pinyin.custom.yaml 中引用该 inputShow_Filter,从而实现对候选词的调序和修饰。

这篇关于rime中州韵小狼毫 inputShow lua Filter 输入字符透传滤镜的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/567730

相关文章

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

由Lua 粘合的Nginx生态环境

转自:http://blog-zq-org.qiniucdn.com/pyblosxom/oss/openresty-intro-2012-03-06-01-13.html -- agentzh tech-club.org 演讲听录 免责聲明 Lua 粘合的 Nginx 生态环境 2.1. openresty 2.2. 配置小语言 2.3. ngx_drizzle 2.4.

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

当你输入一个网址后都发生什么

原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/  作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。 本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

如何将一个文件里不包含某个字符的行输出到另一个文件?

第一种: grep -v 'string' filename > newfilenamegrep -v 'string' filename >> newfilename 第二种: sed -n '/string/!'p filename > newfilenamesed -n '/string/!'p filename >> newfilename

Debugging Lua Project created in Cocos Code IDE creates “Waiting for debugger to connect” in Win-7

转自 I Installed Cocos Code IDE and created a new Lua Project. When Debugging the Project(F11) the game window pops up and gives me the message waiting for debugger to connect and then freezes. Also a

【Python 千题 —— 算法篇】字符统计

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在编程中,对字符串的字符统计是一个常见任务。这在文本处理、数据分析、词频统计、自然语言处理等领域有广泛应用。无论是统计字母出现的频率,还是分析不同字符类型的数量,字符串字符统计都是非常有用的技术。 字符统

C语言进阶【1】--字符函数和字符串函数【1】

本章概述 字符分类函数字符转换函数strlen的使用和模拟实现strcpy的使用和模拟实现strcat的使用和模拟实现strcmp的使用和模拟实现彩蛋时刻!!! 字符分类函数 字符: 这个概念,我们在以前的文章中讲过了。我们键盘输入的信息都是字符。字符大体可以分为两类——单个字符,字符串。而单个字符又可以进行分类——字母字符,数字字符,特殊字符和不可见字符。进行思维图展示: 在日