diff --git a/double_pinyin.schema.yaml b/double_pinyin.schema.yaml index 5e07384..4dd9abc 100644 --- a/double_pinyin.schema.yaml +++ b/double_pinyin.schema.yaml @@ -150,38 +150,9 @@ reduce_english_filter: # Lua 配置: 置顶候选项 -# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。 -# (对简繁转换无效,除非简繁文字一致 😰) -# -# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。 -# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü -# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰 -# -# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh, -# 如 'ni hao' 会自动生成 'ni hao'、'ni h' -# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch' -# 如果同时写了 da zhuan 和 da zhong,输入 da z 时,排在前面的的优先,除非明确指定 'da z'。 +#TODO 文档和示例 pin_cand_filter: # 格式:编码字词1字词2…… - # 示例: - # - 'le 了' # 输入 le 时,置顶「了」 - # - 'la 啦' # 输入 la 时,置顶「啦」 - # - 'ta 他 她 它' # 可以置顶多个字,按顺序排列 - # - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。 - # - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」 - # - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置 - # # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面 - # - da zhuang 大专 - # - da zhong 大众 - # # 如果明确定义了简码形式,则完全使用简码形式 - # - da z 打字 - # - da zh 打仗 - # # ⚠️ 双拼 - # - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼 - # - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的) - # 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台,don't know why ... - d 的 diff --git a/double_pinyin_abc.schema.yaml b/double_pinyin_abc.schema.yaml index f3224fe..3817806 100644 --- a/double_pinyin_abc.schema.yaml +++ b/double_pinyin_abc.schema.yaml @@ -150,38 +150,9 @@ reduce_english_filter: # Lua 配置: 置顶候选项 -# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。 -# (对简繁转换无效,除非简繁文字一致 😰) -# -# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。 -# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü -# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰 -# -# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh, -# 如 'ni hao' 会自动生成 'ni hao'、'ni h' -# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch' -# 如果同时写了 da zhuan 和 da zhong,输入 da z 时,排在前面的的优先,除非明确指定 'da z'。 +#TODO 文档和示例 pin_cand_filter: # 格式:编码字词1字词2…… - # 示例: - # - 'le 了' # 输入 le 时,置顶「了」 - # - 'la 啦' # 输入 la 时,置顶「啦」 - # - 'ta 他 她 它' # 可以置顶多个字,按顺序排列 - # - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。 - # - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」 - # - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置 - # # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面 - # - da zhuang 大专 - # - da zhong 大众 - # # 如果明确定义了简码形式,则完全使用简码形式 - # - da z 打字 - # - da zh 打仗 - # # ⚠️ 双拼 - # - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼 - # - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的) - # 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台,don't know why ... - d 的 diff --git a/double_pinyin_flypy.schema.yaml b/double_pinyin_flypy.schema.yaml index 46bab1f..9f7369c 100644 --- a/double_pinyin_flypy.schema.yaml +++ b/double_pinyin_flypy.schema.yaml @@ -150,38 +150,9 @@ reduce_english_filter: # Lua 配置: 置顶候选项 -# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。 -# (对简繁转换无效,除非简繁文字一致 😰) -# -# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。 -# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü -# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰 -# -# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh, -# 如 'ni hao' 会自动生成 'ni hao'、'ni h' -# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch' -# 如果同时写了 da zhuan 和 da zhong,输入 da z 时,排在前面的的优先,除非明确指定 'da z'。 +#TODO 文档和示例 pin_cand_filter: # 格式:编码字词1字词2…… - # 示例: - # - 'le 了' # 输入 le 时,置顶「了」 - # - 'la 啦' # 输入 la 时,置顶「啦」 - # - 'ta 他 她 它' # 可以置顶多个字,按顺序排列 - # - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。 - # - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」 - # - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置 - # # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面 - # - da zhuang 大专 - # - da zhong 大众 - # # 如果明确定义了简码形式,则完全使用简码形式 - # - da z 打字 - # - da zh 打仗 - # # ⚠️ 双拼 - # - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼 - # - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的) - # 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台,don't know why ... - d 的 diff --git a/double_pinyin_mspy.schema.yaml b/double_pinyin_mspy.schema.yaml index c9da5ae..6521e03 100644 --- a/double_pinyin_mspy.schema.yaml +++ b/double_pinyin_mspy.schema.yaml @@ -150,38 +150,9 @@ reduce_english_filter: # Lua 配置: 置顶候选项 -# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。 -# (对简繁转换无效,除非简繁文字一致 😰) -# -# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。 -# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü -# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰 -# -# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh, -# 如 'ni hao' 会自动生成 'ni hao'、'ni h' -# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch' -# 如果同时写了 da zhuan 和 da zhong,输入 da z 时,排在前面的的优先,除非明确指定 'da z'。 +#TODO 文档和示例 pin_cand_filter: # 格式:编码字词1字词2…… - # 示例: - # - 'le 了' # 输入 le 时,置顶「了」 - # - 'la 啦' # 输入 la 时,置顶「啦」 - # - 'ta 他 她 它' # 可以置顶多个字,按顺序排列 - # - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。 - # - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」 - # - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置 - # # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面 - # - da zhuang 大专 - # - da zhong 大众 - # # 如果明确定义了简码形式,则完全使用简码形式 - # - da z 打字 - # - da zh 打仗 - # # ⚠️ 双拼 - # - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼 - # - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的) - # 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台,don't know why ... - d 的 diff --git a/double_pinyin_sogou.schema.yaml b/double_pinyin_sogou.schema.yaml index bfaa913..6b0cf05 100644 --- a/double_pinyin_sogou.schema.yaml +++ b/double_pinyin_sogou.schema.yaml @@ -150,38 +150,9 @@ reduce_english_filter: # Lua 配置: 置顶候选项 -# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。 -# (对简繁转换无效,除非简繁文字一致 😰) -# -# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。 -# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü -# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰 -# -# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh, -# 如 'ni hao' 会自动生成 'ni hao'、'ni h' -# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch' -# 如果同时写了 da zhuan 和 da zhong,输入 da z 时,排在前面的的优先,除非明确指定 'da z'。 +#TODO 文档和示例 pin_cand_filter: # 格式:编码字词1字词2…… - # 示例: - # - 'le 了' # 输入 le 时,置顶「了」 - # - 'la 啦' # 输入 la 时,置顶「啦」 - # - 'ta 他 她 它' # 可以置顶多个字,按顺序排列 - # - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。 - # - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」 - # - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置 - # # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面 - # - da zhuang 大专 - # - da zhong 大众 - # # 如果明确定义了简码形式,则完全使用简码形式 - # - da z 打字 - # - da zh 打仗 - # # ⚠️ 双拼 - # - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼 - # - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的) - # 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台,don't know why ... - d 的 diff --git a/double_pinyin_ziguang.schema.yaml b/double_pinyin_ziguang.schema.yaml index cba9182..7c68977 100644 --- a/double_pinyin_ziguang.schema.yaml +++ b/double_pinyin_ziguang.schema.yaml @@ -150,38 +150,9 @@ reduce_english_filter: # Lua 配置: 置顶候选项 -# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。 -# (对简繁转换无效,除非简繁文字一致 😰) -# -# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。 -# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü -# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰 -# -# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh, -# 如 'ni hao' 会自动生成 'ni hao'、'ni h' -# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch' -# 如果同时写了 da zhuan 和 da zhong,输入 da z 时,排在前面的的优先,除非明确指定 'da z'。 +#TODO 文档和示例 pin_cand_filter: # 格式:编码字词1字词2…… - # 示例: - # - 'le 了' # 输入 le 时,置顶「了」 - # - 'la 啦' # 输入 la 时,置顶「啦」 - # - 'ta 他 她 它' # 可以置顶多个字,按顺序排列 - # - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。 - # - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」 - # - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置 - # # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面 - # - da zhuang 大专 - # - da zhong 大众 - # # 如果明确定义了简码形式,则完全使用简码形式 - # - da z 打字 - # - da zh 打仗 - # # ⚠️ 双拼 - # - 'chong zhuang 重装' # 保留现有的 preedit_format 时可用全拼 - # - 'is vl 重装' # 清空 preedit_format 时要用双拼拼写(示例为小鹤的) - # 如果有任意一个方案的 pin_cand_filter 为空则可能会在方案间串台,don't know why ... - d 的 diff --git a/lua/pin_cand_filter.lua b/lua/pin_cand_filter.lua index ad78d8f..bea9b2f 100644 --- a/lua/pin_cand_filter.lua +++ b/lua/pin_cand_filter.lua @@ -1,7 +1,7 @@ -- 置顶候选项 -- Powered By ChatGPT -local function isInList(list, str) +local function is_in_list(list, str) for i, v in ipairs(list) do if v == str then return true, i @@ -10,21 +10,24 @@ local function isInList(list, str) return false, 0 end +local function starts_with(a, b) + return string.sub(a, 1, string.len(b)) == b +end + local M = {} function M.init(env) env.name_space = env.name_space:gsub("^*", "") local list = env.engine.schema.config:get_list(env.name_space) - - -- 如果定义了 'da zhuan' 或 'da zhong' ,会自动生成 'da z' 和 'da zh'。 - -- 然而,如果明确定义了 'da z' 或 'da zh',则会优先使用这些明确自定义的简码,用 set 来做判断。 if not list then return end -- no configuration found -> stop + + -- 如果定义了 'da zhuan' 或 'da zhong' ,会自动生成 'daz' 和 'dazh' 的键。 + -- 然而,如果明确定义了 'da z' 或 'da zh',则会优先使用这些明确自定义的简码,用 set 来做判断。 local set = {} for i = 0, list.size - 1 do local preedit, texts = list:get_value_at(i).value:match("([^\t]+)\t(.+)") - -- use #text to match both nil and empty value if #preedit > 0 and #texts > 0 then - set[preedit] = true + set[preedit:gsub(" ", "")] = true end end @@ -32,43 +35,46 @@ function M.init(env) -- 'l 了 啦' → M.pin_cands["l"] = {"了", "啦"} -- 'ta 他 她 它' → M.pin_cands["ta"] = {"他", "她", "它"} -- - -- 对于词汇(preedit 包含空格),同时生成简码的拼写(最后一个空格后的首字母),如: - -- 'ni hao 你好 拟好' → M.pin_cands["ni hao"] = {"你好", "拟好"} - -- → M.pin_cands["ni h"] = {"你好", "拟好"} + -- 无空格词汇,如 `nihao 你好` → M.pin_cands["nihao"] = {"你好"} + -- + -- 包含空格的词汇,同时生成简码的拼写(最后一个空格后的首字母),如: + -- 'ni hao 你好 拟好' → M.pin_cands["nihao"] = {"你好", "拟好"} + -- → M.pin_cands["nih"] = {"你好", "拟好"} -- -- 如果最后一个空格后以 zh ch sh 开头,额外再生成 zh, ch, sh 的拼写,如: - -- 'zhi chi 支持' → M.pin_cands["zhi chi"] = {"支持"} - -- → M.pin_cands["zhi c"] = {"支持"} - -- → M.pin_cands["zhi ch"] = {"支持"} + -- 'zhi chi 支持' → M.pin_cands["zhichi"] = {"支持"} + -- → M.pin_cands["zhic"] = {"支持"} + -- → M.pin_cands["zhich"] = {"支持"} -- -- 如果同时定义了 'da zhuan 大专' 'da zhong 大众',会生成: - -- M.pin_cands["da zhuan"] = {"大专"} - -- M.pin_cands["da zhong"] = {"大众"} - -- M.pin_cands["da z"] = {"大专", "大众"} -- 先写的排在前面 - -- M.pin_cands["da zh"] = {"大专", "大众"} -- 先写的排在前面 + -- M.pin_cands["dazhuan"] = {"大专"} + -- M.pin_cands["dazhong"] = {"大众"} + -- M.pin_cands["daz"] = {"大专", "大众"} -- 先写的排在前面 + -- M.pin_cands["dazh"] = {"大专", "大众"} -- 先写的排在前面 -- -- 如果同时定义了 'da zhuan 大专' 'da zhong 大众' 且明确定义了简码形式 'da z 打字',会生成: - -- M.pin_cands["da zhuan"] = {"大专"} - -- M.pin_cands["da zhong"] = {"大众"} - -- M.pin_cands["da z"] = {"打字"} -- 明确定义的优先级更高 - -- M.pin_cands["da zh"] = {"大专", "大众"} -- 没明确定义的,仍然按上面的方式生成 + -- M.pin_cands["dazhuan"] = {"大专"} + -- M.pin_cands["dazhong"] = {"大众"} + -- M.pin_cands["daz"] = {"打字"} -- 明确定义的优先级更高 + -- M.pin_cands["dazh"] = {"大专", "大众"} -- 没明确定义的,仍然按上面的方式生成 M.pin_cands = {} for i = 0, list.size - 1 do local preedit, texts = list:get_value_at(i).value:match("([^\t]+)\t(.+)") -- use #text to match both nil and empty value if #preedit > 0 and #texts > 0 then - M.pin_cands[preedit] = {} + local preedit_no_spaces = preedit:gsub(" ", "") + M.pin_cands[preedit_no_spaces] = {} -- 按照配置生成完整的拼写 for text in texts:gmatch("%S+") do - table.insert(M.pin_cands[preedit], text) + table.insert(M.pin_cands[preedit_no_spaces], text) end -- 额外处理包含空格的 preedit,增加最后一个拼音的首字母和 zh, ch, sh 的简码 if preedit:find(" ") then local preceding_part, last_part = preedit:match("^(.+)%s(%S+)$") if #last_part > 0 then - -- 生成最后一个拼音的简码拼写(最后一个空格后的首字母),如 ni hao 生成 ni h - local p1 = preceding_part .. " " .. last_part:sub(1, 1) + -- 生成最后一个拼音的简码拼写(最后一个空格后的首字母),如 ni hao 生成 nih + local p1 = preceding_part:gsub(" ", "") .. last_part:sub(1, 1) -- 只在没有明确定义此简码时才生成,已有的追加,没有的直接赋值 if not set[p1] then if M.pin_cands[p1] ~= nil then @@ -76,12 +82,12 @@ function M.init(env) table.insert(M.pin_cands[p1], text) end else - M.pin_cands[p1] = M.pin_cands[preedit] + M.pin_cands[p1] = M.pin_cands[preedit_no_spaces] end end - -- 生成最后一个拼音的 zh, ch, sh 的简码拼写(最后一个空格后以 zh ch sh 开头),如 zhi chi 生成 zhi ch + -- 生成最后一个拼音的 zh, ch, sh 的简码拼写(最后一个空格后以 zh ch sh 开头),如 zhi chi 生成 zhich if last_part:match("^[zcs]h") then - local p2 = preceding_part .. " " .. last_part:sub(1, 2) + local p2 = preceding_part:gsub(" ", "") .. last_part:sub(1, 2) -- 只在没有明确定义此简码时才生成,已有的追加,没有的直接赋值 if not set[p2] then if M.pin_cands[p2] ~= nil then @@ -89,7 +95,7 @@ function M.init(env) table.insert(M.pin_cands[p2], text) end else - M.pin_cands[p2] = M.pin_cands[preedit] + M.pin_cands[p2] = M.pin_cands[preedit_no_spaces] end end end @@ -99,26 +105,27 @@ function M.init(env) end end -function M.func(input) +function M.func(input, env) -- If there is no configuration, no filtering will be performed if not M.pin_cands then for cand in input:iter() do yield(cand) end return end + local pined = {} -- 提升的候选项 local others = {} -- 其余候选项 local pined_count = 0 + for cand in input:iter() do - local texts = M.pin_cands[cand.preedit] - local candtext = cand.text - if cand:get_dynamic_type() == "Shadow" then - -- handle cands converted by simplifier - local originalCand = cand:get_genuine() - if #originalCand.text == #candtext then - -- 笑|😄 candtext = 😄; 麼|么 candtext = 麼; - candtext = originalCand.text - end + local preedit_no_spaces = cand.preedit:gsub(" ", "") + + -- 跳过不需要处理的部分,这样期望置顶的字词在句子开头及输入到一半时也会被置顶 + if M.pin_cands[preedit_no_spaces] == nil then + yield(cand) + goto continue end + + local texts = M.pin_cands[preedit_no_spaces] if texts then -- 给 pined 几个空字符串占位元素,后面直接 pined[idx] = cand 确保 pined 与 texts 顺序一致 if #pined < #texts then @@ -126,8 +133,18 @@ function M.func(input) table.insert(pined, '') end end + -- 处理简繁转换后的问题 + local candtext = cand.text + if cand:get_dynamic_type() == "Shadow" then + -- handle cands converted by simplifier + local originalCand = cand:get_genuine() + if #originalCand.text == #candtext then + -- 笑|😄 candtext = 😄; 麼|么 candtext = 麼; + candtext = originalCand.text + end + end -- 要置顶的放到 pined 中,其余的放到 others - local ok, idx = isInList(texts, candtext) + local ok, idx = is_in_list(texts, candtext) if ok then pined[idx] = cand pined_count = pined_count + 1 @@ -142,6 +159,8 @@ function M.func(input) table.insert(others, cand) break end + + ::continue:: end -- yield pined others 及后续的候选项 diff --git a/rime.lua b/rime.lua index 82945e2..a39f2bf 100644 --- a/rime.lua +++ b/rime.lua @@ -86,3 +86,15 @@ is_in_user_dict = require("is_in_user_dict") -- get_record_filername() 函数中仅支持了 Windows、macOS、Linux cold_word_drop_processor = require("cold_word_drop.processor") cold_word_drop_filter = require("cold_word_drop.filter") + +-- 临时用的 +function debug_checker(input, env) + for cand in input:iter() do + yield(ShadowCandidate( + cand, + cand.type, + cand.text, + env.engine.context.input .. " - " .. env.engine.context:get_preedit().text .. " - " .. cand.preedit + )) + end +end diff --git a/rime_ice.schema.yaml b/rime_ice.schema.yaml index 86f0015..b6edb4b 100644 --- a/rime_ice.schema.yaml +++ b/rime_ice.schema.yaml @@ -139,35 +139,9 @@ reduce_english_filter: # Lua 配置: 置顶候选项 -# 符合左边的 cand.preedit 时,按顺序置顶右边的候选项。只是提升已有候选项的顺序,没有自创编码的功能。 -# (对简繁转换无效,除非简繁文字一致 😰) -# -# preedit 是经过 translator/preedit_format 处理后的编码,如果是词语则包含空格。 -# ⚠️ 注意方案的 preedit_format 设定,如果 v 显示为 ü,那么左边也要写 ü -# ⚠️ 双拼 ⚠️ 显示为全拼拼写就要写全拼,如 'shuang pin',显示为双拼拼写就要写双拼,如 'ul pb' 😰 -# -# 脚本自动额外生成 preedit 中最后一个空格后面的首字母和 zh ch sh, -# 如 'ni hao' 会自动生成 'ni hao'、'ni h' -# 如 'bu hao chi' 会自动生成 'bu hao chi'、'bu hao c'、'bu hao ch' -# 如果同时写了 da zhuan 和 da zhong,输入 da z 时,排在前面的的优先,除非明确指定 'da z'。 +#TODO 文档和示例 pin_cand_filter: # 格式:编码字词1字词2…… - # 示例: - # - 'le 了' # 输入 le 时,置顶「了」 - # - 'la 啦' # 输入 la 时,置顶「啦」 - # - 'ta 他 她 它' # 可以置顶多个字,按顺序排列 - # - 'ta 啊' # ❌ 编码不会产生的字词,不会生效且影响查找效率。自创编码的字词句可以写到 custom_phrase 中。 - # - 'l 了 啦' # 支持单编码或输入到一半的编码,输入 l 时,置顶「了、啦」 - # - 's m 什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'w s m 为什么' # 支持简拼,要和输入框的行为一致,有空格加空格 - # - 'ni hao 你好 👋 拟好' # 如果 emoji 被分割开了,可以任意调整 emoji 的位置 - # # 以下两行,会额外生成 'da z' 'da zh' 的置顶,前两个候选项是「大专、大众」,先写的排在前面 - # - da zhuang 大专 - # - da zhong 大众 - # # 如果明确定义了简码形式,则完全使用简码形式 - # - da z 打字 - # - da zh 打仗 - # # ⚙️ 以下是个人习惯,仅供参考,可以打个补丁来覆盖。 # 单编码 - q 去 千 @@ -197,41 +171,79 @@ pin_cand_filter: - n 那 哪 拿 呐 - m 吗 嘛 呣 # 单字 - - de 的 地 得 - - na 那 哪 拿 - - ta 他 她 它 祂 + - qing 请 + - qu 去 + - wo 我 + - wei 为 - er 而 儿 二 - - ma 吗 嘛 妈 - - zhe 这 着 - - hai 还 - - you 有 🈶 又 由 - - mei 没 - - bing 并 + - en 嗯 + - rang 让 + - ta 他 她 它 祂 + - tai 太 - tong 同 - yu 与 于 - - he 和 - - ji 及 即 既 - - shi 是 时 - - la 啦 拉 - - xing 行 - - dian 点 + - you 有 🈶 又 由 - yao 要 - - kan 看 - - bei 被 - - zuo 做 + - ye 也 + - shi 是 时 使 式 + - de 的 地 得 + - dan 但 - dao 到 倒 - - xiang 想 像 向 - - zhi 只 - - cai 才 + - dian 点 + - dang 当 + - dui 对 + - fa 发 + - ge 个 各 - gang 刚 + - he 和 + - huo 或 + - hui 会 + - hai 还 + - hao 好 + - ji 及 即 既 - jiu 就 + - jiang 将 + - ke 可 + - kan 看 + - kai 开 + - le 了 + - la 啦 拉 + - lai 来 + - li 里 + - zai 在 再 + - zhi 只 + - zhe 这 着 + - zhen 真 + - zui 最 + - zheng 正 + - zuo 做 坐 左 + - ze 则 + - xiang 想 像 向 + - xian 先 + - xia 下 + - xing 行 + - cai 才 + - cong 从 + - chu 出 + - ba 吧 把 + - bu 不 + - bing 并 + - bei 被 + - bie 别 + - bi 比 + - bing 并 + - na 那 哪 拿 + - ni 你 + - ma 吗 嘛 妈 + - mei 没 # ta、na - - ta de 他的 她的 它的 - - 'tad 他的 她的 它的' # 英文单词 tad 造成 preedit 为 tad,从而让 ta d 的置顶未生效,需要明确再写上 tad - ta men 他们 她们 它们 + - tm 他们 她们 它们 + - ta de 他的 她的 它的 - ta men de 他们的 她们的 它们的 - na er 那儿 哪儿 - na ge 那个 哪个 + - ng 那个 哪个 - na xie 那些 哪些 - na li 那里 哪里 - na bian 那边 哪边 @@ -239,28 +251,25 @@ pin_cand_filter: - na wei 那位 哪位 # 简码 - zh 这 - - d d 等等 - - 'dd 等等' # 覆盖英文单词 D&D - - d d d d 等等等等 - - g g 刚刚 - - c g g 才刚刚 - - z d 知道 - - b z d 不知道 - - w w 往往 - - h h 哈哈 - - k k 看看 - - c c 常常 - - x x 想想 🤔 想象 - - y w 因为 - - s m 什么 - - w s m 为什么 - - s b s 是不是 - - m s m 没什么 - - s m d 什么的 - - s m s 什么是 - - 'sms 什么是' # 覆盖英文单词 SMS - - s m a 什么啊 - - 'sma 什么啊' # 覆盖英文单词 S码 + - dd 等等 + - dddd 等等等等 + - gg 刚刚 + - cgg 才刚刚 + - zd 知道 + - bzd 不知道 + - ww 往往 + - hh 哈哈 + - kk 看看 + - cc 常常 + - xx 想想 🤔 想象 + - yw 因为 + - sm 什么 + - wsm 为什么 + - sbs 是不是 + - msm 没什么 + - smd 什么的 + - sms 什么是 + - sma 什么啊 # 主翻译器,拼音