From 1eed724c8dfe2107999f27818005f491feb1655f Mon Sep 17 00:00:00 2001 From: Dvel Date: Wed, 7 Jun 2023 17:47:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=AD=E8=8B=B1=E6=B7=B7=E8=BE=93?= =?UTF-8?q?=E8=AF=8D=E6=9D=A1=E8=87=AA=E5=8A=A8=E7=A9=BA=E6=A0=BC=EF=BC=9B?= =?UTF-8?q?=20close=20#327?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/cn_en_spacer.lua | 35 +++++++++++++++++++++++++++++++++++ rime.lua | 17 +++++++++-------- rime_ice.schema.yaml | 2 +- 3 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 lua/cn_en_spacer.lua diff --git a/lua/cn_en_spacer.lua b/lua/cn_en_spacer.lua new file mode 100644 index 0000000..e827e56 --- /dev/null +++ b/lua/cn_en_spacer.lua @@ -0,0 +1,35 @@ +-- 为中英混输词条(cn_en.dict.yaml)自动空格 +-- 示例:`VIP中P` → `VIP 中 P` +-- +-- ChatGPT 写的 + +local function add_spaces(s) + -- 在中文字符后和英文字符前插入空格 + s = s:gsub("([\228-\233][\128-\191]-)([%w%p])", "%1 %2") + -- 在英文字符后和中文字符前插入空格 + s = s:gsub("([%w%p])([\228-\233][\128-\191]-)", "%1 %2") + return s +end + +local function is_mixed_cn_en_num(s) + -- 检查是否含有中文 + if not s:find("([\228-\233][\128-\191]-)") then + return false + end + -- 检查是否含有英文或数字 + if not s:find("[%a%d]") then + return false + end + return true +end + +local function cn_en_spacer(input, env) + for cand in input:iter() do + if is_mixed_cn_en_num(cand.text) then + cand = cand:to_shadow_candidate(cand.type, add_spaces(cand.text), cand.comment) + end + yield(cand) + end +end + +return cn_en_spacer diff --git a/rime.lua b/rime.lua index 50c7d85..723537c 100644 --- a/rime.lua +++ b/rime.lua @@ -7,16 +7,10 @@ v_filter = require("v_filter") -- 长词优先(全拼) long_word_filter = require("long_word_filter") --- 降低部分英语单词在候选项的位置 --- 可在方案中配置要降低的单词 -reduce_english_filter = require("reduce_english_filter") - --- 以词定字 --- 可在 default.yaml key_binder 下配置快捷键,默认为左右中括号 [ ] +-- 以词定字,可在 default.yaml key_binder 下配置快捷键,默认为左右中括号 [ ] select_character = require("select_character") --- 日期时间 --- 可在方案中配置触发关键字。 +-- 日期时间,可在方案中配置触发关键字。 date_translator = require("date_translator") -- Unicode,U 开头 @@ -28,9 +22,16 @@ number_translator = require("number_translator") -- 自动大写英文词汇 autocap_filter = require("autocap_filter") +-- 降低部分英语单词在候选项的位置,可在方案中配置要降低的单词 +reduce_english_filter = require("reduce_english_filter") + -- 默认未启用: +-- 中英混输词条自动空格 +-- 在 engine/filters 增加 - lua_filter@cn_en_spacer +cn_en_spacer = require("cn_en_spacer") + -- 九宫格,手机用。 -- 在 engine/filters 增加 - lua_filter@t9_preedit t9_preedit = require("t9_preedit") diff --git a/rime_ice.schema.yaml b/rime_ice.schema.yaml index e79a2e7..e68b382 100644 --- a/rime_ice.schema.yaml +++ b/rime_ice.schema.yaml @@ -69,8 +69,8 @@ engine: filters: - simplifier@emoji # Emoji - simplifier@traditionalize # 简繁切换 - - lua_filter@autocap_filter # 英文自动大写 - lua_filter@v_filter # v 模式 symbols 优先(否则是英文优先) + - lua_filter@autocap_filter # 英文自动大写 - lua_filter@reduce_english_filter # 降低部分英语单词在候选项的位置 - lua_filter@long_word_filter # 长词优先 - uniquifier # 去重