Skip to content

Instantly share code, notes, and snippets.

@lotem
Created July 9, 2012 12:23
Show Gist options
  • Save lotem/3076166 to your computer and use it in GitHub Desktop.
Save lotem/3076166 to your computer and use it in GitHub Desktop.
自動識別西文及數字組成的用戶名
# 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]*$"
@huo-feng-ding
Copy link

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 大牛厉害,完美解决,谢谢。

@redleafnew
Copy link

输入带点的会重复,如输入 分号data.doc上屏的会是datadata.data.doc

@huo-feng-ding
Copy link

输入带点的会重复,如输入 分号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不熟悉,暂时改成这样先用着了。

@redleafnew
Copy link

谢谢。可能是我设置的问题,这次不出现点了,直接上屏的是句号。

@redleafnew
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment