From 064df830156a863b563f0744b99461ecd06fd93d Mon Sep 17 00:00:00 2001 From: Dvel Date: Sun, 14 Jan 2024 23:58:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20translator=20=E6=94=B9=E6=88=90?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=AF=BB=E5=8F=96=20recognizer/patterns=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=9D=A5=E8=8E=B7=E5=8F=96=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E5=89=8D=E7=BC=80=20close=20#615?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- double_pinyin.schema.yaml | 4 ++-- double_pinyin_abc.schema.yaml | 4 ++-- double_pinyin_flypy.schema.yaml | 4 ++-- double_pinyin_mspy.schema.yaml | 4 ++-- double_pinyin_sogou.schema.yaml | 4 ++-- double_pinyin_ziguang.schema.yaml | 4 ++-- lua/number_translator.lua | 8 +++++--- lua/unicode.lua | 32 ++++++++++++++++++------------- rime_ice.schema.yaml | 4 ++-- 9 files changed, 38 insertions(+), 30 deletions(-) diff --git a/double_pinyin.schema.yaml b/double_pinyin.schema.yaml index 0981872..ac7348f 100644 --- a/double_pinyin.schema.yaml +++ b/double_pinyin.schema.yaml @@ -242,8 +242,8 @@ recognizer: patterns: # 再增加方案专有的: punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols reverse_lookup: "^L[a-z]+$" # 响应两分拼字的反查 - unicode: "^U[a-f0-9]+" # 响应 Unicode - number: "^R[0-9]+[.]?[0-9]*" # 响应 number_translator + unicode: "^U[a-f0-9]+" # 响应 lua_translator@unicode 脚本将自动获取第 2 个字符作为触发前缀 + number: "^R[0-9]+[.]?[0-9]*" # 响应 lua_translator@number_translator 脚本将自动获取第 2 个字符作为触发前缀 # 从 default 继承快捷键 diff --git a/double_pinyin_abc.schema.yaml b/double_pinyin_abc.schema.yaml index a91e382..2205478 100644 --- a/double_pinyin_abc.schema.yaml +++ b/double_pinyin_abc.schema.yaml @@ -244,8 +244,8 @@ recognizer: patterns: # 再增加方案专有的: punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols reverse_lookup: "^L[a-z]+$" # 响应两分拼字的反查 - unicode: "^U[a-f0-9]+" # 响应 Unicode - number: "^R[0-9]+[.]?[0-9]*" # 响应 number_translator + unicode: "^U[a-f0-9]+" # 响应 lua_translator@unicode 脚本将自动获取第 2 个字符作为触发前缀 + number: "^R[0-9]+[.]?[0-9]*" # 响应 lua_translator@number_translator 脚本将自动获取第 2 个字符作为触发前缀 # 从 default 继承快捷键 diff --git a/double_pinyin_flypy.schema.yaml b/double_pinyin_flypy.schema.yaml index b712e4e..48426ee 100644 --- a/double_pinyin_flypy.schema.yaml +++ b/double_pinyin_flypy.schema.yaml @@ -242,8 +242,8 @@ recognizer: patterns: # 再增加方案专有的: punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols reverse_lookup: "^L[a-z]+$" # 响应两分拼字的反查 - unicode: "^U[a-f0-9]+" # 响应 Unicode - number: "^R[0-9]+[.]?[0-9]*" # 响应 number_translator + unicode: "^U[a-f0-9]+" # 响应 lua_translator@unicode 脚本将自动获取第 2 个字符作为触发前缀 + number: "^R[0-9]+[.]?[0-9]*" # 响应 lua_translator@number_translator 脚本将自动获取第 2 个字符作为触发前缀 # 从 default 继承快捷键 diff --git a/double_pinyin_mspy.schema.yaml b/double_pinyin_mspy.schema.yaml index 9db5c55..a0430c4 100644 --- a/double_pinyin_mspy.schema.yaml +++ b/double_pinyin_mspy.schema.yaml @@ -246,8 +246,8 @@ recognizer: patterns: # 再增加方案专有的: punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols reverse_lookup: "^L[a-z]+$" # 响应两分拼字的反查 - unicode: "^U[a-f0-9]+" # 响应 Unicode - number: "^R[0-9]+[.]?[0-9]*" # 响应 number_translator + unicode: "^U[a-f0-9]+" # 响应 lua_translator@unicode 脚本将自动获取第 2 个字符作为触发前缀 + number: "^R[0-9]+[.]?[0-9]*" # 响应 lua_translator@number_translator 脚本将自动获取第 2 个字符作为触发前缀 # 从 default 继承快捷键 diff --git a/double_pinyin_sogou.schema.yaml b/double_pinyin_sogou.schema.yaml index b94a7c2..3166f92 100644 --- a/double_pinyin_sogou.schema.yaml +++ b/double_pinyin_sogou.schema.yaml @@ -246,8 +246,8 @@ recognizer: patterns: # 再增加方案专有的: punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols reverse_lookup: "^L[a-z]+$" # 响应两分拼字的反查 - unicode: "^U[a-f0-9]+" # 响应 Unicode - number: "^R[0-9]+[.]?[0-9]*" # 响应 number_translator + unicode: "^U[a-f0-9]+" # 响应 lua_translator@unicode 脚本将自动获取第 2 个字符作为触发前缀 + number: "^R[0-9]+[.]?[0-9]*" # 响应 lua_translator@number_translator 脚本将自动获取第 2 个字符作为触发前缀 # 从 default 继承快捷键 diff --git a/double_pinyin_ziguang.schema.yaml b/double_pinyin_ziguang.schema.yaml index e1886f8..b95b665 100644 --- a/double_pinyin_ziguang.schema.yaml +++ b/double_pinyin_ziguang.schema.yaml @@ -244,8 +244,8 @@ recognizer: patterns: # 再增加方案专有的: punct: "^V([0-9]|10|[A-Za-z]+)$" # 响应 symbols_caps_v.yaml 的 symbols reverse_lookup: "^L[a-z]+$" # 响应两分拼字的反查 - unicode: "^U[a-f0-9]+" # 响应 Unicode - number: "^R[0-9]+[.]?[0-9]*" # 响应 number_translator + unicode: "^U[a-f0-9]+" # 响应 lua_translator@unicode 脚本将自动获取第 2 个字符作为触发前缀 + number: "^R[0-9]+[.]?[0-9]*" # 响应 lua_translator@number_translator 脚本将自动获取第 2 个字符作为触发前缀 # 从 default 继承快捷键 diff --git a/lua/number_translator.lua b/lua/number_translator.lua index 0799270..880dc7b 100644 --- a/lua/number_translator.lua +++ b/lua/number_translator.lua @@ -1,5 +1,6 @@ -- 来源 https://github.com/yanhuacuo/98wubi-tables > http://98wb.ysepan.com/ -- 数字、金额大写 (任意大写字母引导+数字) +-- 触发前缀默认为 recognizer/patterns/number 的第 2 个字符,即 R local function splitNumPart(str) local part = {} @@ -109,10 +110,11 @@ local function number_translatorFunc(num) return result end --- 触发模式为任意大写字母(除了 U,U 用在 Unicode 了)开头,可在 recognizer/patterns 中自定义 -local function number_translator(input, seg) +local function number_translator(input, seg, env) + -- 获取 recognizer/patterns/number 的第 2 个字符作为触发前缀 + env.number_keyword = env.number_keyword or env.engine.schema.config:get_string('recognizer/patterns/number'):sub(2, 2) local str, num, numberPart - if string.match(input, "^([A-TV-Z]+%d+)(%.?)(%d*)$") ~= nil then + if env.number_keyword ~= '' and input:sub(1, 1) == env.number_keyword then str = string.gsub(input, "^(%a+)", "") numberPart = number_translatorFunc(str) if #numberPart > 0 then diff --git a/lua/unicode.lua b/lua/unicode.lua index 10f1aca..70b1701 100644 --- a/lua/unicode.lua +++ b/lua/unicode.lua @@ -1,19 +1,25 @@ -- Unicode --- 示例:输入 U62fc 得到「拼」 -- 复制自: https://github.com/shewer/librime-lua-script/blob/main/lua/component/unicode.lua +-- 示例:输入 U62fc 得到「拼」 +-- 触发前缀默认为 recognizer/patterns/unicode 的第 2 个字符,即 U local function unicode(input, seg, env) - local ucodestr = seg:has_tag("unicode") and input:match("U(%x+)") - if ucodestr and #ucodestr > 1 then - local code = tonumber(ucodestr, 16) - local text = utf8.char(code) - yield(Candidate("unicode", seg.start, seg._end, text, string.format("U%x", code))) - if code < 0x10000 then - for i = 0, 15 do - local text = utf8.char(code * 16 + i) - yield(Candidate("unicode", seg.start, seg._end, text, string.format("U%x~%x", code, i))) - end - end - end + -- 获取 recognizer/patterns/unicode 的第 2 个字符作为触发前缀 + env.unicode_keyword = env.unicode_keyword or + env.engine.schema.config:get_string('recognizer/patterns/unicode'):sub(2, 2) + if seg:has_tag("unicode") and env.unicode_keyword ~= '' and input:sub(1, 1) == env.unicode_keyword then + local ucodestr = input:match(env.unicode_keyword .. "(%x+)") + if ucodestr and #ucodestr > 1 then + local code = tonumber(ucodestr, 16) + local text = utf8.char(code) + yield(Candidate("unicode", seg.start, seg._end, text, string.format("U%x", code))) + if code < 0x10000 then + for i = 0, 15 do + local text = utf8.char(code * 16 + i) + yield(Candidate("unicode", seg.start, seg._end, text, string.format("U%x~%x", code, i))) + end + end + end + end end return unicode diff --git a/rime_ice.schema.yaml b/rime_ice.schema.yaml index b7517fc..8883d3d 100644 --- a/rime_ice.schema.yaml +++ b/rime_ice.schema.yaml @@ -205,8 +205,8 @@ recognizer: patterns: # 再增加方案专有的: punct: "^v([0-9]|10|[A-Za-z]+)$" # 响应 symbols_v.yaml 的 symbols,用 'v' 替换 '/' reverse_lookup: "^u[a-z]+$" # 响应两分拼字的反查 - unicode: "^U[a-f0-9]+" # 响应 Unicode - number: "^R[0-9]+[.]?[0-9]*" # 响应 number_translator + unicode: "^U[a-f0-9]+" # 响应 lua_translator@unicode 脚本将自动获取第 2 个字符作为触发前缀 + number: "^R[0-9]+[.]?[0-9]*" # 响应 lua_translator@number_translator 脚本将自动获取第 2 个字符作为触发前缀 # 从 default 继承快捷键