Created
July 9, 2012 12:23
-
-
Save lotem/3076166 to your computer and use it in GitHub Desktop.
自動識別西文及數字組成的用戶名
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# default.custom.yaml | |
# 全局範圍識別輸入串爲 rime + 任意數字序列,以及形如 rimeime-1.2.3 的常用西文短語 | |
# 也可將本組 patch 寫入 <輸入方案ID>.custom.yaml 使這組規則僅在一款輸入方案中有效 | |
# | |
# 第一例,輸入 rime 之後,再輸入任意一個數字,則立即識別爲西文輸入 | |
# 再加上 default.yaml 原有的 email 規則,識別包含 @ 字符的郵箱,於是可以一氣呵成 [email protected] | |
# 第二例,輸入到 rimeime 時,立即識別爲西文輸入,並可跟隨任意位數字及指定的符號 | |
patch: | |
recognizer/patterns/rime123: "^rime[0-9]+$" | |
recognizer/patterns/rimeime: "^rimeime[-_.0-9]*$" |
function append_original_filter(input, env)
local envengine = env.engine
local envcontext = envengine.context
local composition = envcontext.composition
local segmentation = composition:toSegmentation()
local schema = envengine.schema
if(not composition:empty()) then
local seg = composition:back()
if schema.schema_id == "easy_en" then
yield(Candidate("string", seg.start, seg._end, segmentation.input, ""))
elseif segmentation.input:sub(1, 1) == ";" and segmentation.input:len() > 1 then
if segmentation.input:sub(segmentation.input:len(), segmentation.input:len()) == ";" then
envengine:commit_text(string.sub(segmentation.input, 2))
-- envengine:commit_text(";")
envcontext:clear()
return
else
yield(Candidate("space", seg.start, seg._end, string.sub(segmentation.input, 2), ""))
end
end
end
for cand in input:iter() do
yield(cand)
end
end
return append_original_filter
我把函数改了一行,可以按分号后将前边输入的英文也顶屏了。
@gfgkmn 大牛厉害,完美解决,谢谢。
输入带点的会重复,如输入 分号data.doc上屏的会是datadata.data.doc
输入带点的会重复,如输入 分号data.doc上屏的会是datadata.data.doc
-- 原始字符串输出,用来实现分号临时英文,再输入分号顶屏上字
function append_original_filter(input, env)
local envengine = env.engine
local envcontext = envengine.context
local composition = envcontext.composition
local segmentation = composition:toSegmentation()
local schema = envengine.schema
if(not composition:empty()) then
local seg = composition:back()
if schema.schema_id == "easy_en" then
yield(Candidate("string", seg.start, seg._end, segmentation.input, ""))
elseif segmentation.input:sub(1, 1) == ";" and segmentation.input:len() > 1 then
if segmentation.input:sub(segmentation.input:len(), segmentation.input:len()) == ";" then
envengine:commit_text(string.sub(segmentation.input, 2))
-- envengine:commit_text(";")
envcontext:clear()
return
-- else
-- yield(Candidate("space", seg.start, seg._end, string.sub(segmentation.input, 2), ""))
end
end
end
for cand in input:iter() do
yield(cand)
end
end
return append_original_filter
对lua不熟悉,暂时改成这样先用着了。
谢谢。可能是我设置的问题,这次不出现点了,直接上屏的是句号。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
我参考了另一个常见问题,就是如何输入当前时间的,解决方法是提供了一个 lua 脚本来提供“时间”的候选词。我实验了以下,发现它也可以用来模拟原来搜狗输入法早期的 v 模式(临时输入英文模式,而非现在的大写数字输入的 v 模式)。可以在 rime.lua 中这样写:
然后把这个脚本中的函数加入到 <schema_name>.custom.yaml 中,再重新部署,就可以在输入 v 以后进入临时输入英文的状态了:
但是一旦输入空格,就会使得输入字符上屏,因为空格键已经被定义成上屏了。所以在 v 模式里连续输入英文句子目前还是不行的。