From 15626355c21a5614c0ddc2124e6207a42c00b577 Mon Sep 17 00:00:00 2001 From: amzxyz Date: Thu, 11 Dec 2025 12:19:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=9B=B4=E6=8E=A5=E8=BE=85=E5=8A=A9?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=A7=E5=86=99=E8=BE=85=E5=8A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/input_statistics.lua | 62 ++++-- lua/kp_number_processor.lua | 217 +++++++----------- lua/wanxiang.lua | 428 +----------------------------------- wanxiang_algebra.yaml | 362 ++++++++++++++++-------------- 4 files changed, 308 insertions(+), 761 deletions(-) diff --git a/lua/input_statistics.lua b/lua/input_statistics.lua index 29e1073..ad1c847 100644 --- a/lua/input_statistics.lua +++ b/lua/input_statistics.lua @@ -1,16 +1,38 @@ --- github.com/amzxyz -- input_stats.lua -- Rime 统计增强版 (LevelDB / 滚动时间窗口 / 效率仪表盘 / 汉字提纯) -- 维度升级:1, 2, 3, 4, ≥5 字独立统计 -- UI优化:综合数据田字格布局,峰值与均速分开显示 +-- 逻辑更新:增加平台信息清洗函数 (去除 git hash) local userdb = require("lib/userdb") --- 初始化数据库 +local rime_api = rime_api + +-- 1. 初始化数据库 local db = userdb.LevelDb("lua/stats") -- 硬编码信息 local schema_name = "万象拼音" -local software_name = rime_api.get_distribution_code_name() +-- 注意:这里只获取原始名称,清洗逻辑下放给 process_platform_info +local raw_software_name = rime_api.get_distribution_code_name() + +-- ----------------------------------------------------------------------------- +-- 平台信息处理中心 +-- 在这里添加你所有的字符串清洗/替换逻辑 +-- ----------------------------------------------------------------------------- +local function process_platform_info(name, ver) + name = name or "" + ver = ver or "" + + -- 1. 清洗 Trime/Rime 版本号中的 git hash + -- 目标:将 "v3.3.7-48-gda909f96" 变为 "v3.3.7-48" + -- 逻辑:匹配连字符+g+一串字母数字,并替换为空 + ver = ver:gsub("^(.-%-[^%-]+)%-.*$", "%1") + -- 2. 可以在这里修改平台名称 + if name == "Weasel" then name = "小狼毫" end + if name == "trime" then name = "同文输入法" end + + return name, ver +end -- ----------------------------------------------------------------------------- -- 汉字识别核心逻辑 @@ -192,16 +214,12 @@ local function format_summary(title, data) local phrase_rate = 0 if data.len > 0 then phrase_rate = (data.len - data.l1) / data.len * 100 end - -- 估算均速 (Average Speed) - -- 由于没有记录精确的打字时长,这里用一个经验公式估算: - -- 假设每次上屏平均耗时 1.5 - 2 秒左右,以此倒推一个大概的“均速”用于展示 - -- 公式:字数 / (次数 * 2秒 / 60) + -- 估算均速 (优化算法,防止溢出峰值) local estimated_avg_spd = 0 if data.cnt > 0 then estimated_avg_spd = math.floor(data.len / ((data.cnt * 2) / 60)) - -- 修正:如果估算值超过峰值,说明上屏间隔极短(连打),则取峰值的 60% - if estimated_avg_spd > data.spd then estimated_avg_spd = math.floor(data.spd * 0.6) end - if estimated_avg_spd == 0 and data.len > 0 then estimated_avg_spd = data.len end -- 极少字数保底 + if estimated_avg_spd > data.spd then estimated_avg_spd = math.floor(data.spd * 0.8) end -- 修正为峰值的80%更合理 + if estimated_avg_spd == 0 and data.len > 0 then estimated_avg_spd = data.len end end local p1 = (data.l1 / data.cnt) * 100 @@ -209,37 +227,41 @@ local function format_summary(title, data) local p3 = (data.l3 / data.cnt) * 100 local p4 = (data.l4 / data.cnt) * 100 local p_gt4 = (data.l_gt4 / data.cnt) * 100 - local ver = rime_api.get_distribution_version() or "" + + -- 获取原始版本号 + local raw_ver = rime_api.get_distribution_version() or "" + -- 【调用】清洗函数处理平台和版本信息 + local clean_name, clean_ver = process_platform_info(raw_software_name, raw_ver) return string.format( "※ %s统计 · 效率仪表盘\n" .. - "───────────────────\n" .. + "───────────────\n" .. "📊 综合数据\n" .. - " 总字数:%d\t上屏:%d\n" .. - " 峰值速:%d\t均速:%d\n" .. - "───────────────────\n" .. + " 总字数:%d \t 上屏:%d\n" .. + " 峰值速:%d \t 均速:%d\n" .. + "───────────────\n" .. "⚡ 核心效率\n" .. " 平均编码:%.2f 键/字\n" .. " 词组连打:%.1f %%\n" .. - "───────────────────\n" .. + "───────────────\n" .. "📈 字词分布\n" .. " [1] %3d%% %s\n" .. " [2] %3d%% %s\n" .. " [3] %3d%% %s\n" .. " [4] %3d%% %s\n" .. " [≥5] %2d%% %s\n" .. - "───────────────────\n" .. + "───────────────\n" .. "◉ 方案:%s\n" .. "◉ 平台:%s %s", title, data.len, data.cnt, - data.spd, estimated_avg_spd, -- 峰值与均速并排 + data.spd, estimated_avg_spd, avg_code, phrase_rate, p1, draw_bar(p1), p2, draw_bar(p2), p3, draw_bar(p3), p4, draw_bar(p4), - p_gt4, draw_bar(p_gt4), -- 改为 ≥5 - schema_name, software_name, ver + p_gt4, draw_bar(p_gt4), + schema_name, clean_name, clean_ver -- 使用清洗后的变量 ) end diff --git a/lua/kp_number_processor.lua b/lua/kp_number_processor.lua index 1fdc2b6..14c5f08 100644 --- a/lua/kp_number_processor.lua +++ b/lua/kp_number_processor.lua @@ -16,229 +16,158 @@ local wanxiang = require("wanxiang") -- 小键盘键码映射 local KP = { - [0xFFB1] = 1, -- KP_1 - [0xFFB2] = 2, - [0xFFB3] = 3, - [0xFFB4] = 4, - [0xFFB5] = 5, - [0xFFB6] = 6, - [0xFFB7] = 7, - [0xFFB8] = 8, - [0xFFB9] = 9, - [0xFFB0] = 0, -- KP_0 + [0xFFB1] = 1, [0xFFB2] = 2, [0xFFB3] = 3, + [0xFFB4] = 4, [0xFFB5] = 5, [0xFFB6] = 6, + [0xFFB7] = 7, [0xFFB8] = 8, [0xFFB9] = 9, + [0xFFB0] = 0, } local P = {} --- 从 schema 读取 kp_number/patterns 列表 +-- 加载配置中的正则模式 local function load_function_patterns(config) local patterns = {} - - local ok_list, list = pcall(function() - return config:get_list("kp_number/patterns") - end) + local ok_list, list = pcall(function() return config:get_list("kp_number/patterns") end) + if ok_list and list and list.size and list.size > 0 then for i = 0, list.size - 1 do local item = list:get_value_at(i) - if item then - local pat = item:get_string() - if pat and pat ~= "" then - table.insert(patterns, pat) - end - end + if item then table.insert(patterns, item:get_string()) end end end - -- 如果用户没配,给一份保底的默认集合(等价你现在用的那些) + -- 默认保底配置 if #patterns == 0 then patterns = { - "^/[0-9]$", "^/10$", "^/[A-Za-z]+$", - "^`[A-Za-z]*$", - "^``[A-Za-z/`']*$", - "^U[%da-f]+$", - "^R[0-9]+%.?[0-9]*$", - "^N0[1-9]?0?[1-9]?$", - "^N1[02]?0?[1-9]?$", - "^N0[1-9]?[1-2]?[1-9]?$", - "^N1[02]?[1-2]?[1-9]?$", - "^N0[1-9]?3?[01]?$", - "^N1[02]?3?[01]?$", - "^N19?[0-9]?[0-9]?[01]?[0-2]?[0-3]?[0-9]?$", + "^/[0-9]$", "^/10$", "^/[A-Za-z]+$", "^`[A-Za-z]*$", "^``[A-Za-z/`']*$", + "^U[%da-f]+$", "^R[0-9]+%.?[0-9]*$", + "^N0[1-9]?0?[1-9]?$", "^N1[02]?0?[1-9]?$", "^N0[1-9]?[1-2]?[1-9]?$", + "^N1[02]?[1-2]?[1-9]?$", "^N0[1-9]?3?[01]?$", "^N1[02]?3?[01]?$", + "^N19?[0-9]?[0-9]?[01]?[0-2]?[0-3]?[0-9]?$", "^N20?[0-9]?[0-9]?[01]?[0-2]?[0-3]?[0-9]?$", "^V.*$", } end - return patterns end --- 根据“当前编码 + 这次按下的数字字符”判断是否属于命令模式 +-- 判断是否为命令模式 local function is_function_code_after_digit(env, context, digit_char) - if not context or not digit_char or digit_char == "" then - return false - end + if not context or not digit_char or digit_char == "" then return false end local code = context.input or "" local s = code .. digit_char - local pats = env.function_patterns - if not pats or #pats == 0 then - return false - end - + if not pats then return false end + for _, pat in ipairs(pats) do - -- 这里 pat 必须是 Lua pattern 语法 - if s:match(pat) then - return true - end + if s:match(pat) then return true end end return false end ----@param env Env function P.init(env) - local engine = env.engine - local config = engine.schema.config + local engine = env.engine + local config = engine.schema.config local context = engine.context - -- 读数字选词个数 + -- 核心:判断并缓存设备类型 + env.is_mobile = wanxiang.is_mobile_device() + env.page_size = config:get_int("menu/page_size") or 6 - - -- 读小键盘模式:auto / compose,默认 auto + local m = config:get_string("kp_number/kp_number_mode") or "auto" - if m ~= "auto" and m ~= "compose" then - m = "auto" - end - env.kp_mode = m + env.kp_mode = (m == "compose") and "compose" or "auto" - -- 初始化状态快照 - env.context = context + env.context = context env.is_composing = context:is_composing() - env.has_menu = context:has_menu() - - -- 读取命令模式 Lua pattern 集合 + env.has_menu = context:has_menu() env.function_patterns = load_function_patterns(config) - -- 用 update_notifier 同步 context / is_composing / has_menu env.kp_update_connection = context.update_notifier:connect(function(ctx) - env.context = ctx + env.context = ctx env.is_composing = ctx:is_composing() - env.has_menu = ctx:has_menu() + env.has_menu = ctx:has_menu() end) end ----@param env Env function P.fini(env) if env.kp_update_connection then env.kp_update_connection:disconnect() env.kp_update_connection = nil end - env.context = nil - env.is_composing = nil - env.has_menu = nil + env.context = nil env.function_patterns = nil end ----@param key KeyEvent ----@param env Env ----@return ProcessResult function P.func(key, env) - -- 只处理按下 - if key:release() then - return wanxiang.RIME_PROCESS_RESULTS.kNoop + if key:release() then + return wanxiang.RIME_PROCESS_RESULTS.kNoop end - local engine = env.engine - local context = env.context or engine.context - local mode = env.kp_mode or "auto" - local page_sz = env.page_size - - local is_composing = env.is_composing - local has_menu = env.has_menu - - ------------------------------------------------------------------ - -- 1) 小键盘数字:auto / compose - -- 如果“加上本次数字后”还匹配某个命令模式 pattern: - -- 只作为编码输入,不 commit、不选词。 - ------------------------------------------------------------------ + local context = env.context local kp_num = KP[key.keycode] - if kp_num ~= nil then - local ch = tostring(kp_num) -- "0".."9" + ----------------------------------------------------------- + -- 1. 桌面端小键盘专用逻辑 (非 Mobile 才执行) + -- Mobile 端直接跳过此段,进入下方通用逻辑 + ----------------------------------------------------------- + if kp_num ~= nil and not env.is_mobile then + local ch = tostring(kp_num) + + -- 检查命令模式 if is_function_code_after_digit(env, context, ch) then - if context then - if context.push_input then - context:push_input(ch) - else - context.input = (context.input or "") .. ch - end - end + context:push_input(ch) return wanxiang.RIME_PROCESS_RESULTS.kAccepted end - if mode == "auto" then - -- 输入中:参与编码;空闲:直接上屏 - if is_composing then - if context.push_input then - context:push_input(ch) - else - context.input = (context.input or "") .. ch - end - else - engine:commit_text(ch) - end - else - -- compose:始终参与编码 - if context.push_input then + -- Auto / Compose 模式处理 + if env.kp_mode == "auto" then + if env.is_composing then context:push_input(ch) else - context.input = (context.input or "") .. ch + env.engine:commit_text(ch) end + else + context:push_input(ch) end - return wanxiang.RIME_PROCESS_RESULTS.kAccepted end - ------------------------------------------------------------------ - -- 2) 主键盘数字: - -- 2.1 若“加上本次数字后”匹配命令模式 → 只当编码输入 - -- 2.2 否则: - -- 有菜单时:选第 n 个候选 - -- 空闲时:直接上屏 - ------------------------------------------------------------------ + ----------------------------------------------------------- + -- 2. 主键盘数字 / 移动端小键盘逻辑 + ----------------------------------------------------------- local r = key:repr() or "" + -- 特殊处理:如果是移动端且按下了小键盘,强制将其视为普通数字 + if kp_num ~= nil and env.is_mobile then + r = tostring(kp_num) + end + + -- 仅处理数字键 if r:match("^[0-9]$") then - -- 命令模式:只作为编码输入 + -- 优先检查:是否匹配命令模式(参与编码) if is_function_code_after_digit(env, context, r) then - if context then - if context.push_input then - context:push_input(r) - else - context.input = (context.input or "") .. r - end - end + context:push_input(r) return wanxiang.RIME_PROCESS_RESULTS.kAccepted end - -- 有候选菜单时,用数字选「当前页」的第 n 个候选 - if has_menu then + -- 其次检查:是否有菜单(用于选词) + -- 这就是移动端小键盘想要的效果:有菜单时选词 + if env.has_menu then local d = tonumber(r) + local page_sz = env.page_size + if d and d >= 1 and d <= page_sz then - local composition = context and context.composition + local composition = context.composition if composition and not composition:empty() then - local seg = composition:back() -- 当前正在编辑的 segment - local menu = seg and seg.menu + local seg = composition:back() + local menu = seg.menu + if menu and not menu:empty() then - -- 当前高亮候选的全局下标(0 开始) local sel_index = seg.selected_index or 0 - local page_size = page_sz - -- 当前页号 = 高亮索引 / 每页大小 - local page_no = math.floor(sel_index / page_size) - local page_start = page_no * page_size - -- 当前页第 n 个候选的全局下标 - local index = page_start + (d - 1) + local page_no = math.floor(sel_index / page_sz) + local index = (page_no * page_sz) + (d - 1) - -- 防止越界(最后一页候选不足一整页) if index < menu:candidate_count() then if context:select(index) then return wanxiang.RIME_PROCESS_RESULTS.kAccepted @@ -247,10 +176,12 @@ function P.func(key, env) end end end + -- 如果是数字键但没选中(例如超出页码),不做处理,交由系统(通常会上屏数字) return wanxiang.RIME_PROCESS_RESULTS.kNoop end end + return wanxiang.RIME_PROCESS_RESULTS.kNoop end -return P +return P \ No newline at end of file diff --git a/lua/wanxiang.lua b/lua/wanxiang.lua index de325a3..63f6e05 100644 --- a/lua/wanxiang.lua +++ b/lua/wanxiang.lua @@ -280,431 +280,5 @@ function wanxiang.get_input_method_type(env) return result_id end end -wanxiang.tone_matrix = { - ["a"] = {1,2,3,4}, - ["ai"] = {1,2,3,4}, - ["an"] = {1,2,3,4}, - ["ang"] = {1,2,3,4}, - ["ao"] = {1,2,3,4}, - ["ba"] = {1,2,3,4}, - ["bai"] = {1,2,3,4}, - ["ban"] = {1,3,4}, - ["bang"] = {1,3,4}, - ["bao"] = {1,2,3,4}, - ["bei"] = {1,3,4}, - ["ben"] = {1,3,4}, - ["beng"] = {1,2,3,4}, - ["bi"] = {1,2,3,4}, - ["bian"] = {1,3,4}, - ["biang"] = {2}, - ["biao"] = {1,2,3,4}, - ["bie"] = {1,2,3,4}, - ["bin"] = {1,4}, - ["bing"] = {1,3,4}, - ["bo"] = {1,2,3,4}, - ["bu"] = {1,2,3,4}, - ["bun"] = {1}, - ["ca"] = {1,3,4}, - ["cai"] = {1,2,3,4}, - ["can"] = {1,2,3,4}, - ["cang"] = {1,2,4}, - ["cao"] = {1,2,3,4}, - ["ce"] = {4}, - ["cei"] = {4}, - ["cen"] = {1,2}, - ["ceng"] = {1,2,4}, - ["ceok"] = {}, - ["ceon"] = {}, - ["cha"] = {1,2,3,4}, - ["chai"] = {1,2,3,4}, - ["chan"] = {1,2,3,4}, - ["chang"] = {1,2,3,4}, - ["chao"] = {1,2,3,4}, - ["che"] = {1,2,3,4}, - ["chen"] = {1,2,3,4}, - ["cheng"] = {1,2,3,4}, - ["chi"] = {1,2,3,4}, - ["chong"] = {1,2,3,4}, - ["chou"] = {1,2,3,4}, - ["chu"] = {1,2,3,4}, - ["chua"] = {1,3,4}, - ["chuai"] = {1,2,3,4}, - ["chuan"] = {1,2,3,4}, - ["chuang"] = {1,2,3,4}, - ["chui"] = {1,2,4}, - ["chun"] = {1,2,3}, - ["chuo"] = {1,4}, - ["ci"] = {1,2,3,4}, - ["cong"] = {1,2,3,4}, - ["cou"] = {1,2,3,4}, - ["cu"] = {1,2,3,4}, - ["cuan"] = {1,2,4}, - ["cui"] = {1,3,4}, - ["cun"] = {1,2,3,4}, - ["cuo"] = {1,2,3,4}, - ["da"] = {1,2,3,4}, - ["dai"] = {1,3,4}, - ["dan"] = {1,3,4}, - ["dang"] = {1,3,4}, - ["dao"] = {1,2,3,4}, - ["de"] = {1,2}, - ["dei"] = {1,3}, - ["den"] = {4}, - ["deng"] = {1,3,4}, - ["di"] = {1,2,3,4}, - ["dia"] = {3}, - ["dian"] = {1,2,3,4}, - ["diao"] = {1,3,4}, - ["die"] = {1,2,3,4}, - ["dim"] = {2}, - ["din"] = {4}, - ["ding"] = {1,3,4}, - ["diu"] = {1}, - ["dong"] = {1,3,4}, - ["dou"] = {1,2,3,4}, - ["du"] = {1,2,3,4}, - ["duan"] = {1,3,4}, - ["dui"] = {1,3,4}, - ["dun"] = {1,3,4}, - ["duo"] = {1,2,3,4}, - ["e"] = {1,2,3,4}, - ["ei"] = {1,2,3,4}, - ["en"] = {1,3,4}, - ["eng"] = {1}, - ["er"] = {2,3,4}, - ["fa"] = {1,2,3,4}, - ["fan"] = {1,2,3,4}, - ["fang"] = {1,2,3,4}, - ["fei"] = {1,2,3,4}, - ["fen"] = {1,2,3,4}, - ["feng"] = {1,2,3,4}, - ["fiao"] = {4}, - ["fo"] = {2}, - ["fou"] = {1,2,3}, - ["fu"] = {1,2,3,4}, - ["ga"] = {1,2,3,4}, - ["gai"] = {1,3,4}, - ["gan"] = {1,3,4}, - ["gang"] = {1,3,4}, - ["gao"] = {1,3,4}, - ["ge"] = {1,2,3,4}, - ["gei"] = {3}, - ["gen"] = {1,2,3,4}, - ["geng"] = {1,3,4}, - ["gong"] = {1,3,4}, - ["gou"] = {1,3,4}, - ["gu"] = {1,2,3,4}, - ["gua"] = {1,2,3,4}, - ["guai"] = {1,3,4}, - ["guan"] = {1,3,4}, - ["guang"] = {1,3,4}, - ["gui"] = {1,3,4}, - ["gun"] = {3,4}, - ["guo"] = {1,2,3,4}, - ["ha"] = {1,2,3,4}, - ["hai"] = {1,2,3,4}, - ["han"] = {1,2,3,4}, - ["hang"] = {1,2,4}, - ["hao"] = {1,2,3,4}, - ["he"] = {1,2,3,4}, - ["hei"] = {1}, - ["hen"] = {2,3,4}, - ["heng"] = {1,2,4}, - ["hong"] = {1,2,3,4}, - ["hou"] = {1,2,3,4}, - ["hu"] = {1,2,3,4}, - ["hua"] = {1,2,4}, - ["huai"] = {2,4}, - ["huan"] = {1,2,3,4}, - ["huang"] = {1,2,3,4}, - ["hui"] = {1,2,3,4}, - ["hun"] = {1,2,3,4}, - ["huo"] = {1,2,3,4}, - ["ji"] = {1,2,3,4}, - ["jia"] = {1,2,3,4}, - ["jian"] = {1,3,4}, - ["jiang"] = {1,3,4}, - ["jiao"] = {1,2,3,4}, - ["jie"] = {1,2,3,4}, - ["jin"] = {1,3,4}, - ["jing"] = {1,3,4}, - ["jiong"] = {1,3,4}, - ["jiu"] = {1,2,3,4}, - ["ju"] = {1,2,3,4}, - ["juan"] = {1,3,4}, - ["jue"] = {1,2,3,4}, - ["jun"] = {1,3,4}, - ["ka"] = {1,3}, - ["kai"] = {1,3,4}, - ["kan"] = {1,3,4}, - ["kang"] = {1,2,3,4}, - ["kao"] = {1,3,4}, - ["ke"] = {1,2,3,4}, - ["kei"] = {1}, - ["ken"] = {1,3,4}, - ["keng"] = {1,3}, - ["kong"] = {1,3,4}, - ["kou"] = {1,3,4}, - ["ku"] = {1,2,3,4}, - ["kua"] = {1,3,4}, - ["kuai"] = {2,3,4}, - ["kuan"] = {1,3,4}, - ["kuang"] = {1,2,3,4}, - ["kui"] = {1,2,3,4}, - ["kun"] = {1,3,4}, - ["kuo"] = {4}, - ["la"] = {1,2,3,4}, - ["lai"] = {2,3,4}, - ["lan"] = {2,3,4}, - ["lang"] = {1,2,3,4}, - ["lao"] = {1,2,3,4}, - ["le"] = {1,4}, - ["lei"] = {1,2,3,4}, - ["leng"] = {1,2,3,4}, - ["li"] = {1,2,3,4}, - ["lia"] = {3}, - ["lian"] = {2,3,4}, - ["liang"] = {1,2,3,4}, - ["liao"] = {1,2,3,4}, - ["lie"] = {1,2,3,4}, - ["lin"] = {1,2,3,4}, - ["ling"] = {2,3,4}, - ["liu"] = {1,2,3,4}, - ["lo"] = {}, - ["long"] = {1,2,3,4}, - ["lou"] = {1,2,3,4}, - ["lu"] = {1,2,3,4}, - ["luan"] = {2,3,4}, - ["lun"] = {1,2,3,4}, - ["luo"] = {1,2,3,4}, - ["lv"] = {2,3,4}, - ["lve"] = {4}, - ["ma"] = {1,2,3,4}, - ["mai"] = {2,3,4}, - ["man"] = {1,2,3,4}, - ["mang"] = {1,2,3,4}, - ["mao"] = {1,2,3,4}, - ["me"] = {1,4}, - ["mei"] = {2,3,4}, - ["men"] = {1,2,4}, - ["meng"] = {1,2,3,4}, - ["mi"] = {1,2,3,4}, - ["mian"] = {2,3,4}, - ["miao"] = {1,2,3,4}, - ["mie"] = {1,2,4}, - ["min"] = {2,3}, - ["ming"] = {2,3,4}, - ["miu"] = {3,4}, - ["mo"] = {1,2,3,4}, - ["mou"] = {1,2,3,4}, - ["mu"] = {2,3,4}, - ["m̀"] = {}, - ["n"] = {2,3,4}, - ["na"] = {1,2,3,4}, - ["nai"] = {2,3,4}, - ["nan"] = {1,2,3,4}, - ["nang"] = {1,2,3,4}, - ["nao"] = {1,2,3,4}, - ["ne"] = {2,4}, - ["nei"] = {2,3,4}, - ["nen"] = {4}, - ["neng"] = {2,3,4}, - ["ng"] = {2,3,4}, - ["ni"] = {1,2,3,4}, - ["nian"] = {1,2,3,4}, - ["niang"] = {2,3,4}, - ["niao"] = {3,4}, - ["nie"] = {1,2,3,4}, - ["nin"] = {2,3}, - ["ning"] = {2,3,4}, - ["niu"] = {1,2,3,4}, - ["nong"] = {2,3,4}, - ["nou"] = {2,3,4}, - ["nu"] = {2,3,4}, - ["nuan"] = {2,3,4}, - ["nun"] = {2}, - ["nuo"] = {2,3,4}, - ["nv"] = {2,3,4}, - ["nve"] = {4}, - ["o"] = {1,2,3,4}, - ["ou"] = {1,2,3,4}, - ["pa"] = {1,2,3,4}, - ["pai"] = {1,2,3,4}, - ["pan"] = {1,2,3,4}, - ["pang"] = {1,2,3,4}, - ["pao"] = {1,2,3,4}, - ["pei"] = {1,2,3,4}, - ["pen"] = {1,2,3,4}, - ["peng"] = {1,2,3,4}, - ["pi"] = {1,2,3,4}, - ["pian"] = {1,2,3,4}, - ["piao"] = {1,2,3,4}, - ["pie"] = {1,3,4}, - ["pin"] = {1,2,3,4}, - ["ping"] = {1,2,4}, - ["po"] = {1,2,3,4}, - ["pou"] = {1,2,3}, - ["pu"] = {1,2,3,4}, - ["qi"] = {1,2,3,4}, - ["qia"] = {1,2,3,4}, - ["qian"] = {1,2,3,4}, - ["qiang"] = {1,2,3,4}, - ["qiao"] = {1,2,3,4}, - ["qie"] = {1,2,3,4}, - ["qin"] = {1,2,3,4}, - ["qing"] = {1,2,3,4}, - ["qiong"] = {1,2,4}, - ["qiu"] = {1,2,3,4}, - ["qu"] = {1,2,3,4}, - ["quan"] = {1,2,3,4}, - ["que"] = {1,2,4}, - ["qun"] = {1,2,3}, - ["ran"] = {2,3,4}, - ["rang"] = {1,2,3,4}, - ["rao"] = {2,3,4}, - ["re"] = {2,3,4}, - ["ren"] = {2,3,4}, - ["reng"] = {1,2}, - ["ri"] = {4}, - ["rong"] = {2,3,4}, - ["rou"] = {2,3,4}, - ["ru"] = {1,2,3,4}, - ["rua"] = {2}, - ["ruan"] = {2,3,4}, - ["rui"] = {2,3,4}, - ["run"] = {2,3,4}, - ["ruo"] = {2,4}, - ["sa"] = {1,2,3,4}, - ["sai"] = {1,3,4}, - ["san"] = {1,3,4}, - ["sang"] = {1,3,4}, - ["sao"] = {1,3,4}, - ["se"] = {1,4}, - ["sen"] = {1,3}, - ["seng"] = {1,4}, - ["sha"] = {1,2,3,4}, - ["shai"] = {1,3,4}, - ["shan"] = {1,2,3,4}, - ["shang"] = {1,3,4}, - ["shao"] = {1,2,3,4}, - ["she"] = {1,2,3,4}, - ["shei"] = {2}, - ["shen"] = {1,2,3,4}, - ["sheng"] = {1,2,3,4}, - ["shi"] = {1,2,3,4}, - ["shou"] = {1,2,3,4}, - ["shu"] = {1,2,3,4}, - ["shua"] = {1,3,4}, - ["shuai"] = {1,3,4}, - ["shuan"] = {1,4}, - ["shuang"] = {1,3,4}, - ["shui"] = {2,3,4}, - ["shun"] = {3,4}, - ["shuo"] = {1,4}, - ["si"] = {1,2,3,4}, - ["song"] = {1,2,3,4}, - ["sou"] = {1,3,4}, - ["su"] = {1,2,3,4}, - ["suan"] = {1,3,4}, - ["sui"] = {1,2,3,4}, - ["sun"] = {1,3,4}, - ["suo"] = {1,2,3,4}, - ["ta"] = {1,2,3,4}, - ["tai"] = {1,2,3,4}, - ["tan"] = {1,2,3,4}, - ["tang"] = {1,2,3,4}, - ["tao"] = {1,2,3,4}, - ["te"] = {4}, - ["tei"] = {1}, - ["teng"] = {1,2,4}, - ["ti"] = {1,2,3,4}, - ["tian"] = {1,2,3,4}, - ["tiao"] = {1,2,3,4}, - ["tie"] = {1,2,3,4}, - ["tii"] = {2}, - ["ting"] = {1,2,3,4}, - ["tong"] = {1,2,3,4}, - ["tou"] = {1,2,3,4}, - ["tu"] = {1,2,3,4}, - ["tuan"] = {1,2,3,4}, - ["tui"] = {1,2,3,4}, - ["tun"] = {1,2,3,4}, - ["tuo"] = {1,2,3,4}, - ["wa"] = {1,2,3,4}, - ["wai"] = {1,3,4}, - ["wan"] = {1,2,3,4}, - ["wang"] = {1,2,3,4}, - ["wei"] = {1,2,3,4}, - ["wen"] = {1,2,3,4}, - ["weng"] = {1,3,4}, - ["wo"] = {1,3,4}, - ["wu"] = {1,2,3,4}, - ["xi"] = {1,2,3,4}, - ["xia"] = {1,2,3,4}, - ["xian"] = {1,2,3,4}, - ["xiang"] = {1,2,3,4}, - ["xiao"] = {1,2,3,4}, - ["xie"] = {1,2,3,4}, - ["xin"] = {1,2,3,4}, - ["xing"] = {1,2,3,4}, - ["xiong"] = {1,2,4}, - ["xiu"] = {1,2,3,4}, - ["xu"] = {1,2,3,4}, - ["xuan"] = {1,2,3,4}, - ["xue"] = {1,2,3,4}, - ["xun"] = {1,2,4}, - ["ya"] = {1,2,3,4}, - ["yan"] = {1,2,3,4}, - ["yang"] = {1,2,3,4}, - ["yao"] = {1,2,3,4}, - ["ye"] = {1,2,3,4}, - ["yi"] = {1,2,3,4}, - ["yin"] = {1,2,3,4}, - ["ying"] = {1,2,3,4}, - ["yo"] = {1}, - ["yong"] = {1,2,3,4}, - ["you"] = {1,2,3,4}, - ["yu"] = {1,2,3,4}, - ["yuan"] = {1,2,3,4}, - ["yue"] = {1,3,4}, - ["yun"] = {1,2,3,4}, - ["za"] = {1,2,3}, - ["zai"] = {1,3,4}, - ["zan"] = {1,2,3,4}, - ["zang"] = {1,3,4}, - ["zao"] = {1,2,3,4}, - ["ze"] = {2,4}, - ["zei"] = {2}, - ["zen"] = {1,3,4}, - ["zeng"] = {1,3,4}, - ["zha"] = {1,2,3,4}, - ["zhai"] = {1,2,3,4}, - ["zhan"] = {1,3,4}, - ["zhang"] = {1,3,4}, - ["zhao"] = {1,2,3,4}, - ["zhe"] = {1,2,3,4}, - ["zhei"] = {4}, - ["zhen"] = {1,2,3,4}, - ["zheng"] = {1,3,4}, - ["zhi"] = {1,2,3,4}, - ["zhong"] = {1,3,4}, - ["zhou"] = {1,2,3,4}, - ["zhu"] = {1,2,3,4}, - ["zhua"] = {1,3}, - ["zhuai"] = {1,3,4}, - ["zhuan"] = {1,3,4}, - ["zhuang"] = {1,3,4}, - ["zhui"] = {1,3,4}, - ["zhun"] = {1,3,4}, - ["zhuo"] = {1,2,4}, - ["zi"] = {1,2,3,4}, - ["zong"] = {1,3,4}, - ["zou"] = {1,3,4}, - ["zu"] = {1,2,3,4}, - ["zuan"] = {1,3,4}, - ["zui"] = {1,2,3,4}, - ["zun"] = {1,3,4}, - ["zuo"] = {1,2,3,4}, - ["ḿ"] = {2}, -} + return wanxiang diff --git a/wanxiang_algebra.yaml b/wanxiang_algebra.yaml index 9ba4c63..9d8fda2 100644 --- a/wanxiang_algebra.yaml +++ b/wanxiang_algebra.yaml @@ -1088,36 +1088,36 @@ pro: - xform/^n(\d)/en$1/ - xform/^m(\d)(;.*)/me$1$2/ - derive/^([jqxy])u(\d)(;.*)$/$1v$2$3/ - - derive/^([aoe])([ioun])(\d)(;.*)$/$1$1$2$3$4/ + - derive/^([aoe])([ioun])(\d)(;.*)$/$1$1$2$3$4/ # 注释释放非原本自然码规则 - xform/^([aoe])(ng)?(\d)(;.*)$/$1$1$2$3$4/ - - xform/^(\w+?)iu(\d)(;.*)$/$1Ⓠ$2$3/ - - xform/^(\w+?)[uv]an(\d)(;.*)$/$1Ⓡ$2$3/ - - xform/^(\w+?)[uv]e(\d)(;.*)$/$1Ⓣ$2$3/ - - xform/^(\w+?)ing(\d)(;.*)$/$1Ⓨ$2$3/ - - xform/^(\w+?)uai(\d)(;.*)$/$1Ⓨ$2$3/ - - xform/^(\w+?)uo(\d)(;.*)$/$1Ⓞ$2$3/ - - xform/^(\w+?)[uv]n(\d)(;.*)$/$1Ⓟ$2$3/ - - xform/^(\w+?)i?ong(\d)(;.*)$/$1Ⓢ$2$3/ - - xform/^(\w+?)[iu]ang(\d)(;.*)$/$1Ⓓ$2$3/ - - xform/^(\w+?)en(\d)(;.*)$/$1Ⓕ$2$3/ - - xform/^(\w+?)eng(\d)(;.*)$/$1Ⓖ$2$3/ - - xform/^(\w+?)ang(\d)(;.*)$/$1Ⓗ$2$3/ - - xform/^(\w+?)ian(\d)(;.*)$/$1Ⓜ$2$3/ - - xform/^(\w+?)an(\d)(;.*)$/$1Ⓙ$2$3/ - - xform/^(\w+?)iao(\d)(;.*)$/$1Ⓒ$2$3/ - - xform/^(\w+?)ao(\d)(;.*)$/$1Ⓚ$2$3/ - - xform/^(\w+?)ai(\d)(;.*)$/$1Ⓛ$2$3/ - - xform/^(\w+?)ei(\d)(;.*)$/$1Ⓩ$2$3/ - - xform/^(\w+?)ie(\d)(;.*)$/$1Ⓧ$2$3/ - - xform/^(\w+?)ui(\d)(;.*)$/$1Ⓥ$2$3/ - - xform/^(\w+?)ou(\d)(;.*)$/$1Ⓑ$2$3/ - - xform/^(\w+?)in(\d)(;.*)$/$1Ⓝ$2$3/ - - xform/^(\w+?)[iu]a(\d)(;.*)$/$1Ⓦ$2$3/ + - xform/iu(\d)(;.*)$/Ⓠ$1$2/ + - xform/[uv]an(\d)(;.*)$/Ⓡ$1$2/ + - xform/[uv]e(\d)(;.*)$/Ⓣ$1$2/ + - xform/ing(\d)(;.*)$/Ⓨ$1$2/ + - xform/uai(\d)(;.*)$/Ⓨ$1$2/ + - xform/uo(\d)(;.*)$/Ⓞ$1$2/ + - xform/[uv]n(\d)(;.*)$/Ⓟ$1$2/ + - xform/i?ong(\d)(;.*)$/Ⓢ$1$2/ + - xform/[iu]ang(\d)(;.*)$/Ⓓ$1$2/ + - xform/eng(\d)(;.*)$/Ⓖ$1$2/ + - xform/ang(\d)(;.*)$/Ⓗ$1$2/ + - xform/ian(\d)(;.*)$/Ⓜ$1$2/ + - xform/iao(\d)(;.*)$/Ⓒ$1$2/ + - xform/ie(\d)(;.*)$/Ⓧ$1$2/ + - xform/ui(\d)(;.*)$/Ⓥ$1$2/ + - xform/ou(\d)(;.*)$/Ⓑ$1$2/ + - xform/in(\d)(;.*)$/Ⓝ$1$2/ + - xform/[iu]a(\d)(;.*)$/$1Ⓦ$2/ + - xform/(.+)ao(\d)(;.*)$/$1Ⓚ$2$3/ + - xform/(.+)ai(\d)(;.*)$/$1Ⓛ$2$3/ + - xform/(.+)ei(\d)(;.*)$/$1Ⓩ$2$3/ + - xform/(.+)an(\d)(;.*)$/$1Ⓙ$2$3/ + - xform/(.+)en(\d)(;.*)$/$1Ⓕ$2$3/ - xform/^sh/Ⓤ/ - xform/^ch/Ⓘ/ - xform/^zh/Ⓥ/ - xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⓂⒿⒸⓀⓁⓏⓍⓋⒷⓃ/qwrtyuiopsdfghmjcklzxvbn/ - - xform/^(aj|ak|al|ob|ez|ef)(\d?)(;.*)$// # 释放非原本自然码规则 + 自然龙: #原作者项目地址: https://github.com/rimeinn/rime-zrlong __append: - xform/Ⅺ// #用于Lua判断输入类型的标记 @@ -1295,34 +1295,33 @@ pro: - derive/^([jqxy])u(\d)(;.*)$/$1v$2$3/ - derive/^([aoe])([ioun])(\d)(;.*)$/$1$1$2$3$4/ - xform/^([aoe])(ng)?(\d)(;.*)$/$1$1$2$3$4/ - - xform/^(\w+?)iu(\d)(;.*)/$1Ⓠ$2$3/ - - xform/^(\w+?)ei(\d)(;.*)/$1Ⓦ$2$3/ - - xform/^(\w+?)uan(\d)(;.*)/$1Ⓡ$2$3/ - - xform/^(\w+?)[uv]e(\d)(;.*)/$1Ⓣ$2$3/ - - xform/^(\w+?)un(\d)(;.*)/$1Ⓨ$2$3/ - - xform/^(\w+?)uo(\d)(;.*)/$1Ⓞ$2$3/ - - xform/^(\w+?)ie(\d)(;.*)/$1Ⓟ$2$3/ - - xform/^(\w+?)i?ong(\d)(;.*)/$1Ⓢ$2$3/ - - xform/^(\w+?)ing(\d)(;.*)/$1Ⓚ$2$3/ - - xform/^(\w+?)uai(\d)(;.*)/$1Ⓚ$2$3/ - - xform/^(\w+?)ai(\d)(;.*)/$1Ⓓ$2$3/ - - xform/^(\w+?)eng(\d)(;.*)/$1Ⓖ$2$3/ - - xform/^(\w+?)en(\d)(;.*)/$1Ⓕ$2$3/ - - xform/^(\w+?)[iu]ang(\d)(;.*)/$1Ⓛ$2$3/ - - xform/^(\w+?)ang(\d)(;.*)/$1Ⓗ$2$3/ - - xform/^(\w+?)ian(\d)(;.*)/$1Ⓜ$2$3/ - - xform/^(\w+?)an(\d)(;.*)/$1Ⓙ$2$3/ - - xform/^(\w+?)ou(\d)(;.*)/$1Ⓩ$2$3/ - - xform/^(\w+?)iao(\d)(;.*)/$1Ⓝ$2$3/ - - xform/^(\w+?)[iu]a(\d)(;.*)/$1Ⓧ$2$3/ - - xform/^(\w+?)ao(\d)(;.*)/$1Ⓒ$2$3/ - - xform/^(\w+?)ui(\d)(;.*)/$1Ⓥ$2$3/ - - xform/^(\w+?)in(\d)(;.*)/$1Ⓑ$2$3/ + - xform/iu(\d)(;.*)/Ⓠ$1$2/ + - xform/uan(\d)(;.*)/Ⓡ$1$2/ + - xform/[uv]e(\d)(;.*)/Ⓣ$1$2/ + - xform/un(\d)(;.*)/Ⓨ$1$2/ + - xform/uo(\d)(;.*)/Ⓞ$1$2/ + - xform/ie(\d)(;.*)/Ⓟ$1$2/ + - xform/i?ong(\d)(;.*)/Ⓢ$1$2/ + - xform/ing(\d)(;.*)/Ⓚ$1$2/ + - xform/uai(\d)(;.*)/Ⓚ$1$2/ + - xform/eng(\d)(;.*)/Ⓖ$1$2/ + - xform/[iu]ang(\d)(;.*)/Ⓛ$1$2/ + - xform/ang(\d)(;.*)/Ⓗ$1$2/ + - xform/ian(\d)(;.*)/Ⓜ$1$2/ + - xform/ou(\d)(;.*)/Ⓩ$1$2/ + - xform/iao(\d)(;.*)/Ⓝ$1$2/ + - xform/[iu]a(\d)(;.*)/Ⓧ$1$2/ + - xform/ui(\d)(;.*)/Ⓥ$1$2/ + - xform/in(\d)(;.*)/Ⓑ$1$2/ + - xform/(.+)ai(\d)(;.*)/$1Ⓓ$2$3/ + - xform/(.+)an(\d)(;.*)/$1Ⓙ$2$3/ + - xform/(.+)ao(\d)(;.*)/$1Ⓒ$2$3/ + - xform/(.+)en(\d)(;.*)/$1Ⓕ$2$3/ + - xform/(.+)ei(\d)(;.*)/$1Ⓦ$2$3/ - xform/^sh/Ⓤ/ - xform/^ch/Ⓘ/ - xform/^zh/Ⓥ/ - xlit/ⓆⓌⓇⓉⓎⓊⒾⓄⓅⓈⒹⒻⒼⒽⒿⓀⓁⓏⓍⒸⓋⒷⓃⓂ/qwrtyuiopsdfghjklzxcvbnm/ - - xform/^(aj|ac|ad|ew|ef|oz)(\d?)(;.*)$// 微软双拼: __append: - xform/Ⅳ// #用于Lua判断输入类型的标记 @@ -1363,33 +1362,33 @@ pro: - xform/^m(\d)(;.*)/me$1$2/ - derive/^([jqxy])u(\d)(;.*)$/$1v$2$3/ - derive/^([aoe].*)(\d)(;.*)$/o$1$2$3/ - - xform/^([ae])(.*)(\d)(;.*)$/$1$1$2$3$3/ - - xform/^(\w+?)iu(\d)(;.*)/$1Ⓠ$2$3/ - - xform/^(\w+?)er(\d)(;.*)/$1Ⓡ$2$3/ - - xform/^(\w+?)[uv]an(\d)(;.*)/$1Ⓡ$2$3/ - - xform/^(\w+?)[uv]e(\d)(;.*)/$1Ⓣ$2$3/ - - xform/^(\w+?)v(\d)(;.*)/$1Ⓨ$2$3/ - - xform/^(\w+?)uai(\d)(;.*)/$1Ⓨ$2$3/ - - xform/^(\w+?)uo(\d)(;.*)/$1Ⓞ$2$3/ - - xform/^(\w+?)[uv]n(\d)(;.*)/$1Ⓟ$2$3/ - - xform/^(\w+?)i?ong(\d)(;.*)/$1Ⓢ$2$3/ - - xform/^(\w+?)[iu]ang(\d)(;.*)/$1Ⓓ$2$3/ - - xform/^(\w+?)eng(\d)(;.*)/$1Ⓖ$2$3/ - - xform/^(\w+?)en(\d)(;.*)/$1Ⓕ$2$3/ - - xform/^(\w+?)ang(\d)(;.*)/$1Ⓗ$2$3/ - - xform/^(\w+?)ian(\d)(;.*)/$1Ⓜ$2$3/ - - xform/^(\w+?)an(\d)(;.*)/$1Ⓙ$2$3/ - - xform/^(\w+?)iao(\d)(;.*)/$1Ⓒ$2$3/ - - xform/^(\w+?)ao(\d)(;.*)/$1Ⓚ$2$3/ - - xform/^(\w+?)ai(\d)(;.*)/$1Ⓛ$2$3/ - - xform/^(\w+?)ei(\d)(;.*)/$1Ⓩ$2$3/ - - xform/^(\w+?)ie(\d)(;.*)/$1Ⓧ$2$3/ - - xform/^(\w+?)ui(\d)(;.*)/$1Ⓥ$2$3/ + - xform/^([ae])(.*)(\d)(;.*)$/$1$1$2$3$4/ + - xform/iu(\d)(;.*)/Ⓠ$1$2/ + - xform/er(\d)(;.*)/Ⓡ$1$2/ + - xform/[uv]an(\d)(;.*)/Ⓡ$1$2/ + - xform/[uv]e(\d)(;.*)/Ⓣ$1$2/ + - xform/v(\d)(;.*)/Ⓨ$1$2/ + - xform/uai(\d)(;.*)/Ⓨ$1$2/ + - xform/uo(\d)(;.*)/Ⓞ$1$2/ + - xform/[uv]n(\d)(;.*)/Ⓟ$1$2/ + - xform/i?ong(\d)(;.*)/Ⓢ$1$2/ + - xform/[iu]ang(\d)(;.*)/Ⓓ$1$2/ + - xform/eng(\d)(;.*)/Ⓖ$1$2/ + - xform/en(\d)(;.*)/Ⓕ$1$2/ + - xform/ang(\d)(;.*)/Ⓗ$1$2/ + - xform/ian(\d)(;.*)/Ⓜ$1$2/ + - xform/an(\d)(;.*)/Ⓙ$1$2/ + - xform/iao(\d)(;.*)/Ⓒ$1$2/ + - xform/ao(\d)(;.*)/Ⓚ$1$2/ + - xform/ai(\d)(;.*)/Ⓛ$1$2/ + - xform/ei(\d)(;.*)/Ⓩ$1$2/ + - xform/ie(\d)(;.*)/Ⓧ$1$2/ + - xform/ui(\d)(;.*)/Ⓥ$1$2/ - derive/Ⓣ/Ⓥ/ - - xform/^(\w+?)ou(\d)(;.*)/$1Ⓑ$2$3/ - - xform/^(\w+?)ing(\d)(;.*)/$1◯$2$3/ #注意这里的◯用来暂时替换分号 - - xform/^(\w+?)in(\d)(;.*)/$1Ⓝ$2$3/ - - xform/^(\w+?)[iu]a(\d)(;.*)/$1Ⓦ$2$3/ + - xform/ou(\d)(;.*)/Ⓑ$1$2/ + - xform/ing(\d)(;.*)/◯$1$2/ #注意这里的◯用来暂时替换分号 + - xform/in(\d)(;.*)/Ⓝ$1$2/ + - xform/[iu]a(\d)(;.*)/Ⓦ$1$2/ - xform/^sh/Ⓤ/ - xform/^ch/Ⓘ/ - xform/^zh/Ⓥ/ @@ -1435,31 +1434,31 @@ pro: - derive/^([jqxy])u(\d)(;.*)$/$1v$2$3/ - derive/^([aoe].*)(\d)(;.*)$/o$1$2$3/ - xform/^([ae])(.*)(\d)(;.*)$/$1$1$2$3$4/ - - xform/^(\w+?)iu(\d)(;.*)$/$1Ⓠ$2$3/ - - xform/^(\w+?)[iu]a(\d)(;.*)$/$1Ⓦ$2$3/ - - xform/^(\w+?)er(\d)(;.*)$/$1Ⓡ$2$3/ - - xform/^(\w+?)[uv]an(\d)(;.*)$/$1Ⓡ$2$3/ - - xform/^(\w+?)[uv]e(\d)(;.*)$/$1Ⓣ$2$3/ - - xform/^(\w+?)v(\d)(;.*)$/$1Ⓨ$2$3/ - - xform/^(\w+?)uai(\d)(;.*)$/$1Ⓨ$2$3/ - - xform/^(\w+?)uo(\d)(;.*)$/$1Ⓞ$2$3/ - - xform/^(\w+?)[uv]n(\d)(;.*)$/$1Ⓟ$2$3/ - - xform/^(\w+?)i?ong(\d)(;.*)$/$1Ⓢ$2$3/ - - xform/^(\w+?)[iu]ang(\d)(;.*)$/$1Ⓓ$2$3/ - - xform/^(\w+?)en(\d)(;.*)$/$1Ⓕ$2$3/ - - xform/^(\w+?)eng(\d)(;.*)$/$1Ⓖ$2$3/ - - xform/^(\w+?)ang(\d)(;.*)$/$1Ⓗ$2$3/ - - xform/^(\w+?)ian(\d)(;.*)$/$1Ⓜ$2$3/ - - xform/^(\w+?)an(\d)(;.*)$/$1Ⓙ$2$3/ - - xform/^(\w+?)iao(\d)(;.*)$/$1Ⓒ$2$3/ - - xform/^(\w+?)ao(\d)(;.*)$/$1Ⓚ$2$3/ - - xform/^(\w+?)ai(\d)(;.*)$/$1Ⓛ$2$3/ - - xform/^(\w+?)ei(\d)(;.*)$/$1Ⓩ$2$3/ - - xform/^(\w+?)ie(\d)(;.*)$/$1Ⓧ$2$3/ - - xform/^(\w+?)ui(\d)(;.*)$/$1Ⓥ$2$3/ - - xform/^(\w+?)ou(\d)(;.*)$/$1Ⓑ$2$3/ - - xform/^(\w+?)in(\d)(;.*)$/$1Ⓝ$2$3/ - - xform/^(\w+?)ing(\d)(;.*)$/$1◯$2$3/ #注意这里的◯用来暂时替换分号 + - xform/iu(\d)(;.*)$/Ⓠ$1$2/ + - xform/[iu]a(\d)(;.*)$/Ⓦ$1$2/ + - xform/er(\d)(;.*)$/Ⓡ$1$2/ + - xform/[uv]an(\d)(;.*)$/Ⓡ$1$2/ + - xform/[uv]e(\d)(;.*)$/Ⓣ$1$2/ + - xform/v(\d)(;.*)$/Ⓨ$1$2/ + - xform/uai(\d)(;.*)$/Ⓨ$1$2/ + - xform/uo(\d)(;.*)$/Ⓞ$1$2/ + - xform/[uv]n(\d)(;.*)$/Ⓟ$1$2/ + - xform/i?ong(\d)(;.*)$/Ⓢ$1$2/ + - xform/[iu]ang(\d)(;.*)$/Ⓓ$1$2/ + - xform/en(\d)(;.*)$/Ⓕ$1$2/ + - xform/eng(\d)(;.*)$/Ⓖ$1$2/ + - xform/ang(\d)(;.*)$/Ⓗ$1$2/ + - xform/ian(\d)(;.*)$/Ⓜ$1$2/ + - xform/an(\d)(;.*)$/Ⓙ$1$2/ + - xform/iao(\d)(;.*)$/Ⓒ$1$2/ + - xform/ao(\d)(;.*)$/Ⓚ$1$2/ + - xform/ai(\d)(;.*)$/Ⓛ$1$2/ + - xform/ei(\d)(;.*)$/Ⓩ$1$2/ + - xform/ie(\d)(;.*)$/Ⓧ$1$2/ + - xform/ui(\d)(;.*)$/Ⓥ$1$2/ + - xform/ou(\d)(;.*)$/Ⓑ$1$2/ + - xform/in(\d)(;.*)$/Ⓝ$1$2/ + - xform/ing(\d)(;.*)$/◯$1$2/ #注意这里的◯用来暂时替换分号 - xform/^sh/Ⓤ/ - xform/^ch/Ⓘ/ - xform/^zh/Ⓥ/ @@ -1505,31 +1504,31 @@ pro: - xform/^m(\d)(;.*)/me$1$2/ - derive/^([jqxy])u(\d)(;.*)$/$1v$2$3/ - xform/^([aoe].*)(\d)(;.*)$/o$1$2$3/ - - xform/^(\w+?)en(\d)(;.*)$/$1Ⓦ$2$3/ - - xform/^(\w+?)eng(\d)(;.*)$/$1Ⓣ$2$3/ - - xform/^(\w+?)in(\d)(;.*)$/$1Ⓨ$2$3/ - - xform/^(\w+?)uai(\d)(;.*)$/$1Ⓨ$2$3/ - - xform/^(\w+?)uo(\d)(;.*)$/$1Ⓞ$2$3/ - - xform/^(\w+?)ai(\d)(;.*)$/$1Ⓟ$2$3/ - - xform/^(\w+?)[iu]ang(\d)(;.*)$/$1Ⓖ$2$3/ - - xform/^(\w+?)ang(\d)(;.*)$/$1Ⓢ$2$3/ - - xform/^(\w+?)ie(\d)(;.*)$/$1Ⓓ$2$3/ - - xform/^(\w+?)ian(\d)(;.*)$/$1Ⓕ$2$3/ - - xform/^(\w+?)i?ong(\d)(;.*)$/$1Ⓗ$2$3/ - - xform/^(\w+?)er(\d)(;.*)$/$1Ⓙ$2$3/ - - xform/^(\w+?)iu(\d)(;.*)$/$1Ⓙ$2$3/ - - xform/^(\w+?)ei(\d)(;.*)$/$1Ⓚ$2$3/ - - xform/^(\w+?)uan(\d)(;.*)$/$1Ⓛ$2$3/ - - xform/^(\w+?)ing(\d)(;.*)$/$1◯$2$3/ #注意这里的◯用来暂时替换分号 - - xform/^(\w+?)ou(\d)(;.*)$/$1Ⓩ$2$3/ - - xform/^(\w+?)[iu]a(\d)(;.*)$/$1Ⓧ$2$3/ - - xform/^(\w+?)iao(\d)(;.*)$/$1Ⓑ$2$3/ - - xform/^(\w+?)ue(\d)(;.*)$/$1Ⓝ$2$3/ - - xform/^(\w+?)ui(\d)(;.*)$/$1Ⓝ$2$3/ - - xform/^(\w+?)ve(\d)(;.*)$/$1Ⓝ$2$3/ - - xform/^(\w+?)un(\d)(;.*)$/$1Ⓜ$2$3/ - - xform/^(\w+?)ao(\d)(;.*)$/$1Ⓠ$2$3/ - - xform/^(\w+?)an(\d)(;.*)$/$1Ⓡ$2$3/ + - xform/en(\d)(;.*)$/Ⓦ$1$2/ + - xform/eng(\d)(;.*)$/Ⓣ$1$2/ + - xform/in(\d)(;.*)$/Ⓨ$1$2/ + - xform/uai(\d)(;.*)$/Ⓨ$1$2/ + - xform/uo(\d)(;.*)$/Ⓞ$1$2/ + - xform/ai(\d)(;.*)$/Ⓟ$1$2/ + - xform/[iu]ang(\d)(;.*)$/Ⓖ$1$2/ + - xform/ang(\d)(;.*)$/Ⓢ$1$2/ + - xform/ie(\d)(;.*)$/Ⓓ$1$2/ + - xform/ian(\d)(;.*)$/Ⓕ$1$2/ + - xform/i?ong(\d)(;.*)$/Ⓗ$1$2/ + - xform/er(\d)(;.*)$/Ⓙ$1$2/ + - xform/iu(\d)(;.*)$/Ⓙ$1$2/ + - xform/ei(\d)(;.*)$/Ⓚ$1$2/ + - xform/uan(\d)(;.*)$/Ⓛ$1$2/ + - xform/ing(\d)(;.*)$/◯$1$2/ #注意这里的◯用来暂时替换分号 + - xform/ou(\d)(;.*)$/Ⓩ$1$2/ + - xform/[iu]a(\d)(;.*)$/Ⓧ$1$2/ + - xform/iao(\d)(;.*)$/Ⓑ$1$2/ + - xform/ue(\d)(;.*)$/Ⓝ$1$2/ + - xform/ui(\d)(;.*)$/Ⓝ$1$2/ + - xform/ve(\d)(;.*)$/Ⓝ$1$2/ + - xform/un(\d)(;.*)$/Ⓜ$1$2/ + - xform/ao(\d)(;.*)$/Ⓠ$1$2/ + - xform/an(\d)(;.*)$/Ⓡ$1$2/ - xform/^zh/Ⓤ/ - xform/^sh/Ⓘ/ - xform/^ch/Ⓐ/ @@ -1574,30 +1573,30 @@ pro: - xform/^n(\d)/en$1/ - xform/^m(\d)(;.*)/me$1$2/ - xform/^([aoe].*)(\d)(;.*)$/Ⓞ$1$2$3/ - - xform/^(\w+?)ei(\d)(;.*)$/$1Ⓠ$2$3/ - - xform/^(\w+?)ian(\d)(;.*)$/$1Ⓦ$2$3/ - - xform/^(\w+?)er(\d)(;.*)$/$1Ⓡ$2$3/ - - xform/^(\w+?)iu(\d)(;.*)$/$1Ⓡ$2$3/ - - xform/^(\w+?)[iu]ang(\d)(;.*)$/$1Ⓣ$2$3/ - - xform/^(\w+?)ing(\d)(;.*)$/$1Ⓨ$2$3/ - - xform/^(\w+?)uo(\d)(;.*)$/$1Ⓞ$2$3/ - - xform/^(\w+?)uan(\d)(;.*)$/$1Ⓟ$2$3/ - - xform/^(\w+?)i?ong(\d)(;.*)$/$1Ⓢ$2$3/ - - xform/^(\w+?)[iu]a(\d)(;.*)$/$1Ⓓ$2$3/ - - xform/^(\w+?)en(\d)(;.*)$/$1Ⓕ$2$3/ - - xform/^(\w+?)eng(\d)(;.*)$/$1Ⓖ$2$3/ - - xform/^(\w+?)ang(\d)(;.*)$/$1Ⓗ$2$3/ - - xform/^(\w+?)an(\d)(;.*)$/$1Ⓙ$2$3/ - - xform/^(\w+?)iao(\d)(;.*)$/$1Ⓩ$2$3/ - - xform/^(\w+?)ao(\d)(;.*)$/$1Ⓚ$2$3/ - - xform/^(\w+?)in(\d)(;.*)$/$1Ⓒ$2$3/ - - xform/^(\w+?)uai(\d)(;.*)$/$1Ⓒ$2$3/ - - xform/^(\w+?)ai(\d)(;.*)$/$1Ⓛ$2$3/ - - xform/^(\w+?)ie(\d)(;.*)$/$1Ⓧ$2$3/ - - xform/^(\w+?)ou(\d)(;.*)$/$1Ⓑ$2$3/ - - xform/^(\w+?)un(\d)(;.*)$/$1Ⓝ$2$3/ - - xform/^(\w+?)[uv]e(\d)(;.*)$/$1Ⓜ$2$3/ - - xform/^(\w+?)ui(\d)(;.*)$/$1Ⓜ$2$3/ + - xform/ei(\d)(;.*)$/Ⓠ$1$2/ + - xform/ian(\d)(;.*)$/Ⓦ$1$2/ + - xform/er(\d)(;.*)$/Ⓡ$1$2/ + - xform/iu(\d)(;.*)$/Ⓡ$1$2/ + - xform/[iu]ang(\d)(;.*)$/Ⓣ$1$2/ + - xform/ing(\d)(;.*)$/Ⓨ$1$2/ + - xform/uo(\d)(;.*)$/Ⓞ$1$2/ + - xform/uan(\d)(;.*)$/Ⓟ$1$2/ + - xform/i?ong(\d)(;.*)$/Ⓢ$1$2/ + - xform/[iu]a(\d)(;.*)$/Ⓓ$1$2/ + - xform/en(\d)(;.*)$/Ⓕ$1$2/ + - xform/eng(\d)(;.*)$/Ⓖ$$1$2/ + - xform/ang(\d)(;.*)$/Ⓗ$1$2/ + - xform/an(\d)(;.*)$/Ⓙ$1$2/ + - xform/iao(\d)(;.*)$/Ⓩ$1$2/ + - xform/ao(\d)(;.*)$/Ⓚ$1$2/ + - xform/in(\d)(;.*)$/Ⓒ$1$2/ + - xform/uai(\d)(;.*)$/Ⓒ$1$2/ + - xform/ai(\d)(;.*)$/Ⓛ$1$2/ + - xform/ie(\d)(;.*)$/Ⓧ$1$2/ + - xform/ou(\d)(;.*)$/Ⓑ$1$2/ + - xform/un(\d)(;.*)$/Ⓝ$1$2/ + - xform/[uv]e(\d)(;.*)$/Ⓜ$1$2/ + - xform/ui(\d)(;.*)$/Ⓜ$1$2/ - xform/^zh/Ⓐ/ - xform/^ch/Ⓔ/ - xform/^sh/Ⓥ/ @@ -1712,28 +1711,31 @@ pro: - derive/^([jqxy])u(\d)(;.*)$/$1v$2$3/ - derive/^([aoe])([ioun])(\d)(;.*)$/$1$1$2$3$4/ - xform/^([aoe])(ng)?(\d)(;.*)$/$1$1$2$3$4/ - - xform/^(\w+?)[iu]a(\d)(;.*)$/$1Ⓠ$2$3/ - - xform/^(\w+?)[vu]an(\d)(;.*)$/$1Ⓦ$2$3/ - - xform/^(\w+?)en(\d)(;.*)$/$1Ⓡ$2$3/ - - xform/^(\w+?)ie(\d)(;.*)$/$1Ⓣ$2$3/ - - xform/^(\w+?)(iu|uai)(\d)(;.*)$/$1Ⓨ$3$4/ - - xform/^(\w+?)uo(\d)(;.*)$/$1Ⓞ$2$3/ - - xform/^(\w+?)ou(\d)(;.*)$/$1Ⓟ$2$3/ - - xform/^(\w+?)i?ong(\d)(;.*)$/$1Ⓢ$2$3/ - - xform/^(\w+?)ian(\d)(;.*)$/$1Ⓓ$2$3/ - - xform/^(\w+?)an(\d)(;.*)$/$1Ⓕ$2$3/ - - xform/^(\w+?)(iang|uang)(\d)(;.*)$/$1Ⓝ$3$4/ - - xform/^(\w+?)iao(\d)(;.*)$/$1Ⓜ$2$3/ - - xform/^(\w+?)ang(\d)(;.*)$/$1Ⓖ$2$3/ - - xform/^(\w+?)eng(\d)(;.*)$/$1Ⓗ$2$3/ - - xform/^(\w+?)ing(\d)(;.*)$/$1Ⓙ$2$3/ - - xform/^(\w+?)ai(\d)(;.*)$/$1Ⓚ$2$3/ - - xform/^(\w+?)(in|er)(\d)(;.*)$/$1Ⓛ$3$4/ - - xform/^(\w+?)[vu]n(\d)(;.*)$/$1Ⓩ$2$3/ - - xform/^(\w+?)[vu]e(\d)(;.*)$/$1Ⓧ$2$3/ - - xform/^(\w+?)ao(\d)(;.*)$/$1Ⓒ$2$3/ - - xform/^(\w+?)(v|ui)(\d)(;.*)$/$1Ⓥ$3$4/ - - xform/^(\w+?)ei(\d)(;.*)$/$1Ⓑ$2$3/ + - xform/[iu]a(\d)(;.*)$/Ⓠ$1$2/ + - xform/[vu]an(\d)(;.*)$/Ⓦ$1$2/ + - xform/en(\d)(;.*)$/Ⓡ$1$2/ + - xform/ie(\d)(;.*)$/Ⓣ$1$2/ + - xform/iu(\d)(;.*)$/Ⓨ$1$2/ + - xform/uai(\d)(;.*)$/Ⓨ$1$2/ + - xform/uo(\d)(;.*)$/Ⓞ$1$2/ + - xform/ou(\d)(;.*)$/Ⓟ$1$2/ + - xform/i?ong(\d)(;.*)$/Ⓢ$1$2/ + - xform/ian(\d)(;.*)$/Ⓓ$1$2/ + - xform/an(\d)(;.*)$/Ⓕ$1$2/ + - xform/[iu]ang(\d)(;.*)$/Ⓝ$1$2/ + - xform/iao(\d)(;.*)$/Ⓜ$1$2/ + - xform/ang(\d)(;.*)$/Ⓖ$1$2/ + - xform/eng(\d)(;.*)$/Ⓗ$1$2/ + - xform/ing(\d)(;.*)$/Ⓙ$1$2/ + - xform/ai(\d)(;.*)$/Ⓚ$1$2/ + - xform/in(\d)(;.*)$/Ⓛ$1$2/ + - xform/er(\d)(;.*)$/Ⓛ$1$2/ + - xform/[vu]n(\d)(;.*)$/Ⓩ$1$2/ + - xform/[vu]e(\d)(;.*)$/Ⓧ$1$2/ + - xform/ao(\d)(;.*)$/Ⓒ$1$2/ + - xform/v(\d)(;.*)$/Ⓥ$1$2/ + - xform/ui(\d)(;.*)$/Ⓥ$1$2/ + - xform/ei(\d)(;.*)$/Ⓑ$1$2/ - xform/^zh/Ⓥ/ - xform/^ch/Ⓘ/ - xform/^sh/Ⓤ/ @@ -1767,6 +1769,24 @@ pro: - derive|^(.*?)(\d?);.*?,(\w)(\w).*$|$1$3$4o| # 双拼\+2位辅助码\+o,主要用来应对小企鹅这类输入法没法使用符号的场景,但同时有些辅助码会出现异常,如:ui uio>uiuio,手机小企鹅使用时开启 - erase/^(.+);(.+)$/ # 删除原始编码加速检索 - xform/◯/;/ #对于微软双拼、搜狗双拼,前面将分号保护了起来,现在放出来让其发挥作用 + # 变体1:转第5位大写 (ab1Cd) + - derive|^(..)(\d)([a-z])([a-z]?)$|$1$2\u$3$4| + # 变体2:转第5位大写 (ab1cD) + - derive|^(..)(\d)([a-z])([a-z]?)$|$1$2$3\u$4| + # 变体3:后两字母都转大写 (ab1CD) + - derive|^(..)(\d)([a-z])([a-z]?)$|$1$2\u$3\u$4| + # 变体1:转第3位大写 (abC1d) + - derive|^(..)([a-z])(\d?)([a-z]?)$|$1\u$2$3$4| + # 变体2:转第5位大写 (abc1D) + - derive|^(..)([a-z])(\d?)([a-z]?)$|$1$2$3\u$4| + # 变体3:两字母都转大写 (abC1D) + - derive|^(..)([a-z])(\d?)([a-z]?)$|$1\u$2$3\u$4| + # 变体1:转第3位大写 (abCd1) + - derive|^(..)([a-z])([a-z])(\d?)$|$1\u$2$3$4| + # 变体2:转第4位大写 (abcD1) + - derive|^(..)([a-z])([a-z])(\d?)$|$1$2\u$3$4| + # 变体3:两字母都转大写 (abCD1) + - derive|^(..)([a-z])([a-z])(\d?)$|$1\u$2\u$3$4| 间接辅助: ########################################位于词库第三个分号后 __append: