diff --git a/.gitignore b/.gitignore index 47799c5..fdf21d1 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ _site/ # Ignore distributions /dist/*.zip /dist/yuhao/*.png +/dist/hamster # Ignore extra key maps /beta/mabiao/*.png diff --git a/beta/hotfix/lua/yuhao/yuhao_autocompletion_filter.lua b/beta/hotfix/lua/yuhao/yuhao_autocompletion_filter.lua new file mode 100644 index 0000000..5d3ab7e --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_autocompletion_filter.lua @@ -0,0 +1,24 @@ +-- Name: yuhao_autocompletion_filter.lua +-- 名稱: 輸入預測開關 +-- Version: 20230901 +-- Author: forFudan 朱宇浩 +-- Github: https://github.com/forFudan/ +-- Purpose: 通過開關打開或關閉輸入預測,從而不需要修改 schema.yaml +-- 版權聲明: +-- 專爲宇浩輸入法製作 +-- 轉載請保留作者名和出處 +-- Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International +--------------------------------------- + +local function filter(input, env) + local fil = env.engine.context:get_option("yuhao_autocompletion_filter") + for cand in input:iter() do + if fil and (cand.type == "completion") then + return + else + yield(cand) + end + end +end + +return { func = filter } \ No newline at end of file diff --git a/beta/hotfix/lua/yuhao/yuhao_chaifen.lua b/beta/hotfix/lua/yuhao/yuhao_chaifen.lua new file mode 100644 index 0000000..bc26a39 --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_chaifen.lua @@ -0,0 +1,333 @@ +-- yuhao_chaifen.lua +-- 作者:ace-who +-- https://github.com/Ace-Who/rime-xuma/blob/master/schema/lua/ace/xuma_spelling.lua + +-- 用于生成词语拆分 + +function map(table, func) + local t = {} + for k, v in pairs(table) do + t[k] = func(v) + end + return t +end + +function utf8chars(str) + local chars = {} + for pos, code in utf8.codes(str) do + chars[#chars + 1] = utf8.char(code) + end + return chars +end + +-- rime.lua + +local rime = {} +package.loaded[...] = rime +rime.encoder = {} + +function rime.encoder.parse_formula(formula) + if type(formula) ~= 'string' or formula:gsub('%u%l', '') ~= '' then return end + local rule = {} + local A, a, U, u, Z, z = ('AaUuZz'):byte(1, -1) + for m in formula:gmatch('%u%l') do + local upper, lower = m:byte(1, 2) + local char_idx = upper < U and upper - A + 1 or upper - Z - 1 + local code_idx = lower < u and lower - a + 1 or lower - z - 1 + rule[#rule + 1] = { char_idx, code_idx } + end + return rule +end + +function rime.encoder.load_settings(setting) + -- 注意到公式同则规则同,可通过 f2r 在 rt 中作引用定义,以节省资源。 + local ft, f2r, rt = {}, {}, {} + for _, t in ipairs(setting) do + if t.length_equal then + ft[t.length_equal] = t.formula + elseif t.length_in_range then + local min, max = table.unpack(t.length_in_range) + for l = min, max do + ft[l] = t.formula + end + end + end + -- setting 中的 length 不一定连续且一般不包括 1,所以不能用 ipairs()。 + for k, f in pairs(ft) do + local rule = rime.encoder.parse_formula(f) + if not rule then return end + if not f2r[f] then f2r[f] = rule end + rt[k] = f2r[f] + end + return rt +end + +function rime.switch_option(name, context) + context:set_option(name, not context:get_option(name)) +end + +-- Cycle options of a switcher. When #options == 1, toggle the only option. +-- Otherwise unset the first set option and unset the next, or the previous if +-- 'reverse' is true. When no set option is present, try the key +-- 'options.save', then 'options.default', then 1. +function rime.cycle_options(options, env, reverse) + local context = env.engine.context + if #options == 0 then return 0 end + if #options == 1 then + rime.switch_option(options[1], context) + return 1 + end + local state + for k, v in ipairs(options) do + if context:get_option(v) then + context:set_option(v, false) + state = (reverse and (k - 1) or (k + 1)) % #options + if state == 0 then state = #options end + break + end + end + local k = state or options.save or options.default or 1 + context:set_option(options[k], true) + return k +end + +-- Set an option in 'options' if no one is set yet. +function rime.init_options(options, context) + for k, v in ipairs(options) do + if context:get_option(v) then return end + end + local k = state or options.save or options.default or 1 + context:set_option(options[k], true) +end + +-- Generate a processor that cycle a group of options with a key. +-- For now only works when composing. +function rime.make_option_cycler( + options, + cycle_key_config_path, + switch_key_config_path, + reverse +) + local processor, cycle_key, switch_key = {} + processor.init = function(env) + local config = env.engine.schema.config + cycle_key = config:get_string(cycle_key_config_path) + switch_key = config:get_string(switch_key_config_path) + end + processor.func = function(key, env) + local context = env.engine.context + if context:is_composing() and key:repr() == cycle_key then + local state = rime.cycle_options(options, env, reverse) + if state > 1 then options.save = state end + return 1 + elseif context:is_composing() and key:repr() == switch_key then + -- 选项状态可能在切换方案时被重置,因此需检测更新。但是不能在 filter.init + -- 中检测,因为得到的似乎是重置之前的状态,说明组件初始化先于状态重置。为 + -- 经济计,仅在手动切换开关时检测。 + -- https://github.com/rime/librime/issues/449 + -- Todo: 对于较新的 librime-lua,尝试利用 option_update_notifier 更新 + -- options.save + for k, v in ipairs(options) do + if context:get_option(v) then + if k > 1 then options.save = k end + end + end + local k = options.save or options.default + -- Consider the 1st options as OFF state. + if context:get_option(options[1]) then + context:set_option(options[1], false) + context:set_option(options[k], true) + else + context:set_option(options[k], false) + context:set_option(options[1], true) + end + return 1 + end + return 2 -- kNoop + end + return processor +end + +-- start of yuhao_chaifen.lua + +local config = {} +config.encode_rules = { + { length_equal = 2, formula = 'AaAbBaBb' }, + { length_equal = 3, formula = 'AaBaCaCb' }, + { length_in_range = { 4, 10 }, formula = 'AaBaCaZa' } +} +-- 注意借用编码规则有局限性:取码索引不一定对应取根索引,尤其是从末尾倒数时。 +local spelling_rules = rime.encoder.load_settings(config.encode_rules) +-- options 要与方案保持一致 +local options = { + 'yuhao_chaifen.off', + 'yuhao_chaifen.lv1', + 'yuhao_chaifen.lv2', + 'yuhao_chaifen.lv3' +} +options.default = 3 + +local processor = rime.make_option_cycler(options, + 'yuhao_chaifen/lua/cycle_key', + 'yuhao_chaifen/lua/switch_key') + +local function xform(s) + -- input format: "[spelling,code_code...,pinyin_pinyin...]" + -- output format: "〔 spelling · code code ... · pinyin pinyin ... 〕" + return s == '' and s or s:gsub('%[', '〔') + :gsub('%]', '〕') + :gsub('{', '<') + :gsub('}', '>') + :gsub('_', ' ') + :gsub(',', ' · ') + :gsub(' · · · ', ' · ') + :gsub(' · · ', ' · ') + :gsub('〔〕', '') + :gsub('〔 · ', "〔") +end + + +local function parse_spll(str) + -- Handle spellings like "{于下}{四点}丶"(for 求) where some radicals are + -- represented by characters in braces. + local radicals = {} + for seg in str:gsub('%b{}', ' %0 '):gmatch('%S+') do + if seg:find('^{.+}$') then + table.insert(radicals, seg) + else + for pos, code in utf8.codes(seg) do + table.insert(radicals, utf8.char(code)) + end + end + end + return radicals +end + +local function parse_raw_tricomment(str) + return str:gsub(',.*', ''):gsub('^%[', '') +end + +-- YZ new +local function parse_raw_code_comment(str) + return str:gsub('%[.-,(.-),.*%]', '[%1]'):gsub(',.*', ''):gsub('^%[', '') +end + +local function spell_phrase(s, spll_rvdb) + local chars = utf8chars(s) + local rule = spelling_rules[#chars] + if not rule then return end + local radicals = {} + for i, coord in ipairs(rule) do + local char_idx = coord[1] > 0 and coord[1] or #chars + 1 + coord[1] + local raw = spll_rvdb:lookup(chars[char_idx]) + -- 若任一取码单字没有注解数据,则不对词组作注。 + if raw == '' then return end + local char_radicals = parse_spll(parse_raw_tricomment(raw)) + local code_idx = coord[2] > 0 and coord[2] or #char_radicals + 1 + coord[2] + radicals[i] = char_radicals[code_idx] or '◇' + end + return table.concat(radicals) +end + +-- YZ new +local function code_phrase(s, spll_rvdb) + local chars = utf8chars(s) + local rule = spelling_rules[#chars] + if not rule then return end + local radicals = {} + for i, coord in ipairs(rule) do + local char_idx = coord[1] > 0 and coord[1] or #chars + 1 + coord[1] + local raw = spll_rvdb:lookup(chars[char_idx]) + -- 若任一取码单字没有注解数据,则不对词组作注。 + if raw == '' then return end + local char_radicals = parse_spll(parse_raw_code_comment(raw)) + local code_idx = coord[2] > 0 and coord[2] or #char_radicals + 1 + coord[2] + radicals[i] = char_radicals[code_idx] or '◇' + end + return table.concat(radicals) +end + +-- YZ modified +local function get_tricomment(cand, env) + local text = cand.text + if utf8.len(text) == 1 then + local raw_spelling = env.spll_rvdb:lookup(text) + if raw_spelling == '' then return end + return env.engine.context:get_option('yuhao_chaifen.lv1') + and xform(raw_spelling:gsub('%[(.-),.*%]', '[%1]')) + or env.engine.context:get_option('yuhao_chaifen.lv2') + and xform(raw_spelling:gsub('%[(.-,.-),.*%]', '[%1]')) + or xform(raw_spelling) -- yuhao_chaifen.lv3 is on + elseif utf8.len(text) > 1 then + local spelling = spell_phrase(text, env.spll_rvdb) + if not spelling then return end + spelling = spelling:gsub('{(.-)}', '<%1>') + if env.engine.context:get_option('yuhao_chaifen.lv1') then + return ('〔%s〕'):format(spelling) + end + -- local code = env.code_rvdb:lookup(text) + local code = code_phrase(text, env.spll_rvdb) + if code ~= '' then -- 按长度排列多个编码。 + local codes = {} + for m in code:gmatch('%S+') do codes[#codes + 1] = m end + table.sort(codes, function(i, j) return i:len() < j:len() end) + return ('〔%s · %s〕'):format(spelling, table.concat(codes, ' ')) + else -- 以括号类型区分非本词典之固有词 + return ('〈 %s 〉'):format(spelling) + -- Todo: 如果要为此类词组添加编码注释,其中的单字存在一字多码的情况,需先 + -- 通过比较来确定全码,再提取词组编码。 + end + end +end + + +local function filter(input, env) + if env.engine.context:get_option('yuhao_chaifen.off') then + for cand in input:iter() do yield(cand) end + return + end + for cand in input:iter() do + --[[ + 用户有时需要通过拼音反查简化字并显示三重注解,但 luna_pinyin 的简化字排序不 + 合理且靠后。用户可开启 simplification 来解决,但是 simplifier 会强制覆盖注 + 释,为了避免三重注解被覆盖,只能生成一个简单类型候选来代替原候选。 + Todo: 测试在 /tips: none 的条件下,用 cand.text 和 + cand:get_genuine().text 分别读到什么值。若分别读到转换前后的候选,则可以仅 + 修改 comment 而不用生成简单类型候选来代替原始候选。这样做的问题是关闭 + yuhao_chaifen 时就不显示 tips 了。 + --]] + if cand.type == 'simplified' then + local comment = (get_tricomment(cand, env) or '') .. cand.comment + cand = Candidate("simp_rvlk", cand.start, cand._end, cand.text, comment) + else + local add_comment = cand.type == 'punct' + and env.code_rvdb:lookup(cand.text) + or cand.type ~= 'sentence' + and get_tricomment(cand, env) + if add_comment and add_comment ~= '' then + -- 混输和反查中的非 completion 类型,原注释为空或主词典的编码。 + -- 为免重复冗长,直接以新增注释替换之。前提是后者非空。 + cand.comment = cand.type ~= 'completion' + and env.is_mixtyping + and add_comment + or add_comment .. cand.comment + end + end + yield(cand) + end +end + + +local function init(env) + local config = env.engine.schema.config + local spll_rvdb = config:get_string('schema_name/spelling') + local code_rvdb = config:get_string('schema_name/code') + local abc_extags_size = config:get_list_size('abc_segmentor/extra_tags') + env.spll_rvdb = ReverseDb('build/' .. spll_rvdb .. '.reverse.bin') + env.code_rvdb = ReverseDb('build/' .. code_rvdb .. '.reverse.bin') + env.is_mixtyping = abc_extags_size > 0 + rime.init_options(options, env.engine.context) +end + + +return { filter = { init = init, func = filter }, processor = processor } diff --git a/beta/hotfix/lua/yuhao/yuhao_char_filter.lua b/beta/hotfix/lua/yuhao/yuhao_char_filter.lua new file mode 100644 index 0000000..d295f3d --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_char_filter.lua @@ -0,0 +1,92 @@ +-- Name: yuhao_char_filter.lua +-- 名称: 常用繁簡字符過濾腳本 +-- Version: 20230418 +-- Author: forFudan 朱宇浩 +-- Github: https://github.com/forFudan/ +-- Purpose: 從候選項中過濾出常用繁簡漢字 +--------------------------------------- +-- +-- 介紹: +-- 字符過濾 charaset_filter 在鼠鬚管中不再有效,因爲 librime-charcode 被單獨出来作爲插件. +-- 所以我寫了這箇 lua 腳本過濾常用繁簡體字 (通规一二級 + 國字常用字 + 部分古籍通规字). +-- 爲了允许標點符号,我把它们加入了字符集中. +-- 用户可以在 str 變量加入自己想包括的字符. +-- +-- 功能: +-- (1) yuhao_char_only: 過濾常用字符,且不顯示其他字符. +-- (2) yuhao_char_first: 将常用字符前置. 原因:在某些形碼碼表中,全碼單字(生僻)會優先於全碼詞語(常用),開啓後可將全碼詞調整到生僻字前面. +-- +-- Description: +-- The charaset_filter is not enabled in the Squirrel as librime-charcode was exclused as a standalone plug-in. +-- So a lua filter would be helpful to filter the frequently used characters (GB2312 + 常用國字標準字體表 + other characters). +-- +-- 使用方法: +-- (1) 需要將此 lua 文件放在 lua 文件夾下 +-- (2) 需要在 rime.lua 中添加以下代碼激活本腳本: +-- yuhao_char_filter = require("yuhao_char_filter") +-- yuhao_char_first = yuhao_char_filter.yuhao_char_first +-- yuhao_char_only = yuhao_char_filter.yuhao_char_only +-- (3) 需要在 switches 添加狀態: +-- - options: [yuhao_char_only, yuhao_char_first, utf8] +-- states: [常用字過濾, 常用字前置, UTF-8] +-- reset: 1 +-- (4) 需要在 engine/filters 添加: +-- - lua_filter@yuhao_char_first +-- - lua_filter@yuhao_char_only +-- +-- 版本: +-- 20230418: 使用集合法重寫代碼,大幅度提升運行效率,不再有卡頓現象. +-- 20221001: 使用遍歷法. + +--------------------------- + +local str = +"一乙二十丁厂七卜八人入儿匕几九刁了刀力乃又三干于亏工土士才下寸大丈与万上小口山巾千乞川亿个夕久么勺凡丸及广亡门丫义之尸己已巳弓子卫也女刃飞习叉马乡丰王开井天夫元无云专丐扎艺木五支厅不犬太区历歹友尤匹车巨牙屯戈比互切瓦止少曰日中贝冈内水见午牛手气毛壬升夭长仁什片仆化仇币仍仅斤爪反介父从仑今凶分乏公仓月氏勿欠风丹匀乌勾凤六文亢方火为斗忆计订户认冗讥心尺引丑巴孔队办以允予邓劝双书幻玉刊未末示击打巧正扑卉扒功扔去甘世艾古节本术可丙左厉石右布夯戊龙平灭轧东卡北占凸卢业旧帅归旦目且叶甲申叮电号田由只叭史央兄叽叼叫叩叨另叹冉皿凹囚四生矢失乍禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印尔乐句匆册卯犯外处冬鸟务包饥主市立冯玄闪兰半汁汇头汉宁穴它讨写让礼训议必讯记永司尼民弗弘出辽奶奴召加皮边孕发圣对台矛纠母幼丝邦式迂刑戎动扛寺吉扣考托老巩圾执扩扫地场扬耳芋共芒亚芝朽朴机权过臣吏再协西压厌戌在百有存而页匠夸夺灰达列死成夹夷轨邪尧划迈毕至此贞师尘尖劣光当早吁吐吓虫曲团吕同吊吃因吸吗吆屿屹岁帆回岂则刚网肉年朱先丢廷舌竹迁乔迄伟传乒乓休伍伏优臼伐延仲件任伤价伦份华仰仿伙伪自伊血向似后行舟全会杀合兆企众爷伞创肌肋朵杂危旬旨旭负匈名各多争色壮冲妆冰庄庆亦刘齐交衣次产决亥充妄闭问闯羊并关米灯州汗污江汛池汝汤忙兴宇守宅字安讲讳军讶许讹论讼农讽设访诀寻那迅尽导异弛孙阵阳收阶阴防奸如妇妃好她妈戏羽观欢买红驮纤驯约级纪驰纫巡寿弄麦玖玛形进戒吞远违韧运扶抚坛技坏抠扰扼拒找批址扯走抄贡汞坝攻赤折抓扳抡扮抢孝坎均抑抛投坟坑抗坊抖护壳志块扭声把报拟却抒劫芙芜苇芽花芹芥芬苍芳严芦芯劳克芭苏杆杠杜材村杖杏杉巫极李杨求甫匣更束吾豆两酉丽医辰励否还尬歼来连轩步卤坚肖旱盯呈时吴助县里呆吱吠呕园旷围呀吨足邮男困吵串员呐听吟吩呛吻吹呜吭吧邑吼囤别吮岖岗帐财针钉牡告我乱利秃秀私每兵估体何佐佑但伸佃作伯伶佣低你住位伴身皂伺佛囱近彻役返余希坐谷妥含邻岔肝肛肚肘肠龟甸免狂犹狈角删条彤卵灸岛刨迎饭饮系言冻状亩况床库庇疗吝应这冷庐序辛弃冶忘闰闲间闷判兑灶灿灼弟汪沐沛汰沥沙汽沃沦汹泛沧没沟沪沈沉沁怀忧忱快完宋宏牢究穷灾良证启评补初社祀识诈诉罕诊词译君灵即层屁尿尾迟局改张忌际陆阿陈阻附坠妓妙妖姊妨妒努忍劲矣鸡纬驱纯纱纲纳驳纵纷纸纹纺驴纽奉玩环武青责现玫表规抹卦坷坯拓拢拔坪拣坦担坤押抽拐拖者拍顶拆拎拥抵拘势抱拄垃拉拦幸拌拧拂拙招坡披拨择抬拇拗其取茉苦昔苛若茂苹苗英苟苑苞范直茁茄茎苔茅枉林枝杯枢柜枚析板松枪枫构杭杰述枕丧或画卧事刺枣雨卖郁矾矿码厕奈奔奇奋态欧殴垄妻轰顷转斩轮软到非叔歧肯齿些卓虎虏肾贤尚旺具味果昆国哎咕昌呵畅明易咙昂迪典固忠呻咒咋咐呼鸣咏呢咄咖岸岩帖罗帜帕岭凯败账贩贬购贮图钓制知迭氛垂牧物乖刮秆和季委秉佳侍岳供使例侠侥版侄侦侣侧凭侨佩货侈依卑的迫质欣征往爬彼径所舍金刹命肴斧爸采觅受乳贪念贫忿肤肺肢肿胀朋股肮肪肥服胁周昏鱼兔狐忽狗狞备饰饱饲变京享庞店夜庙府底疟疙疚剂卒郊庚废净盲放刻育氓闸闹郑券卷单炬炒炊炕炎炉沫浅法泄沽河沾泪沮油泊沿泡注泣泞泻泌泳泥沸沼波泼泽治怔怯怖性怕怜怪怡学宝宗定宠宜审宙官空帘宛实试郎诗肩房诚衬衫视祈话诞诡询该详建肃录隶帚屉居届刷屈弧弥弦承孟陋陌孤陕降函限妹姑姐姓妮始姆迢驾叁参艰线练组绅细驶织驹终驻绊驼绍绎经贯契贰奏春帮玷珍玲珊玻毒型拭挂封持拷拱项垮挎城挟挠政赴赵挡拽哉挺括垢拴拾挑垛指垫挣挤拼挖按挥挪拯某甚荆茸革茬荐巷带草茧茵茶荒茫荡荣荤荧故胡荫荔南药标栈柑枯柄栋相查柏栅柳柱柿栏柠树勃要柬咸威歪研砖厘厚砌砂泵砚砍面耐耍牵鸥残殃轴轻鸦皆韭背战点虐临览竖省削尝昧盹是盼眨哇哄哑显冒映星昨咧昭畏趴胃贵界虹虾蚁思蚂虽品咽骂勋哗咱响哈哆咬咳咪哪哟炭峡罚贱贴贻骨幽钙钝钞钟钢钠钥钦钧钩钮卸缸拜看矩毡氢怎牲选适秒香种秋科重复竿段便俩贷顺修俏保促俄俐侮俭俗俘信皇泉鬼侵禹侯追俊盾待徊衍律很须叙剑逃食盆胚胧胆胜胞胖脉胎勉狭狮独狰狡狱狠贸怨急饵饶蚀饺饼峦弯将奖哀亭亮度迹庭疮疯疫疤咨姿亲音帝施闺闻闽阀阁差养美姜叛送类迷籽娄前首逆兹总炼炸烁炮炫烂剃洼洁洪洒柒浇浊洞测洗活派洽染洛浏济洋洲浑浓津恃恒恢恍恬恤恰恼恨举觉宣宦室宫宪突穿窃客诫冠诬语扁袄祖神祝祠误诱诲说诵垦退既屋昼屏屎费陡逊眉孩陨除险院娃姥姨姻娇姚娜怒架贺盈勇怠癸蚤柔垒绑绒结绕骄绘给绚骆络绝绞骇统耕耘耗耙艳泰秦珠班素匿蚕顽盏匪捞栽捕埂捂振载赶起盐捎捍捏埋捉捆捐损袁捌都哲逝捡挫换挽挚热恐捣壶捅埃挨耻耿耽聂恭莽莱莲莫莉荷获晋恶莹莺真框梆桂桔栖档桐株桥桦栓桃格桩校核样根索哥速逗栗贾酌配翅辱唇夏砸砰砾础破原套逐烈殊殉顾轿较顿毙致柴桌虑监紧党逞晒眠晓哮唠鸭晃哺晌剔晕蚌畔蚣蚊蚪蚓哨哩圃哭哦恩鸯唤唁哼唧啊唉唆罢峭峨峰圆峻贼贿赂赃钱钳钻钾铁铃铅缺氧氨特牺造乘敌秤租积秧秩称秘透笔笑笋债借值倚俺倾倒倘俱倡候赁俯倍倦健臭射躬息倔徒徐殷舰舱般航途拿耸爹舀爱豺豹颁颂翁胰脆脂胸胳脏脐胶脑脓逛狸狼卿逢鸵留鸳皱饿馁凌凄恋桨浆衰衷高郭席准座症病疾斋疹疼疲脊效离紊唐瓷资凉站剖竞部旁旅畜阅羞羔瓶拳粉料益兼烤烘烦烧烛烟烙递涛浙涝浦酒涉消涡浩海涂浴浮涣涤流润涧涕浪浸涨烫涩涌悖悟悄悍悔悯悦害宽家宵宴宾窍窄容宰案请朗诸诺读扇诽袜袖袍被祥课冥谁调冤谅谆谈谊剥恳展剧屑弱陵祟陶陷陪娱娟恕娥娘通能难预桑绢绣验继骏球琐理琉琅捧堵措描域捺掩捷排焉掉捶赦堆推埠掀授捻教掏掐掠掂培接掷控探据掘掺职基聆勘聊娶著菱勒黄菲萌萝菌萎菜萄菊菩萍菠萤营乾萧萨菇械彬梦婪梗梧梢梅检梳梯桶梭救曹副票酝酗厢戚硅硕奢盔爽聋袭盛匾雪辅辆颅虚彪雀堂常眶匙晨睁眯眼悬野啪啦曼晦晚啄啡距趾啃跃略蚯蛀蛇唬累鄂唱患啰唾唯啤啥啸崖崎崭逻崔帷崩崇崛婴圈铐铛铝铜铭铲银矫甜秸梨犁秽移笨笼笛笙符第敏做袋悠偿偶偎偷您售停偏躯兜假衅徘徙得衔盘舶船舵斜盒鸽敛悉欲彩领脚脖脯豚脸脱象够逸猜猪猎猫凰猖猛祭馅馆凑减毫烹庶麻庵痊痒痕廊康庸鹿盗章竟商族旋望率阎阐着羚盖眷粘粗粒断剪兽焊焕清添鸿淋涯淹渠渐淑淌混淮淆渊淫渔淘淳液淤淡淀深涮涵婆梁渗情惜惭悼惧惕惟惊惦悴惋惨惯寇寅寄寂宿窒窑密谋谍谎谐袱祷祸谓谚谜逮敢尉屠弹隋堕随蛋隅隆隐婚婶婉颇颈绩绪续骑绰绳维绵绷绸综绽绿缀巢琴琳琢琼斑替揍款堪塔搭堰揩越趁趋超揽堤提博揭喜彭揣插揪搜煮援搀裁搁搓搂搅壹握搔揉斯期欺联葫散惹葬募葛董葡敬葱蒋蒂落韩朝辜葵棒棱棋椰植森焚椅椒棵棍椎棉棚棕棺榔椭惠惑逼粟棘酣酥厨厦硬硝确硫雁殖裂雄颊雳暂雅翘辈悲紫凿辉敞棠赏掌晴睐暑最晰量鼎喷喳晶喇遇喊遏晾景畴践跋跌跑跛遗蛙蛛蜓蜒蛤喝鹃喂喘喉喻啼喧嵌幅帽赋赌赎赐赔黑铸铺链销锁锄锅锈锋锌锐甥掰短智氮毯氯鹅剩稍程稀税筐等筑策筛筒筏答筋筝傲傅牌堡集焦傍储皓皖粤奥街惩御循艇舒逾番释禽腊脾腋腔腕鲁猩猬猾猴惫然馈馋装蛮就敦斌痘痢痪痛童竣阔善翔羡普粪尊奠道遂曾焰港滞湖湘渣渤渺湿温渴溃溅滑湃渝湾渡游滋渲溉愤慌惰愕愣惶愧愉慨割寒富寓窜窝窖窗窘遍雇裕裤裙禅禄谢谣谤谦犀属屡强粥疏隔隙隘媒絮嫂媚婿登缅缆缉缎缓缔缕骗编骚缘瑟鹉瑞瑰瑙魂肆摄摸填搏塌鼓摆携搬摇搞塘摊聘斟蒜勤靴靶鹊蓝墓幕蓬蓄蒲蓉蒙蒸献椿禁楚楷榄想槐榆楼概赖酪酬感碍碘碑碎碰碗碌尴雷零雾雹辐辑输督频龄鉴睛睹睦瞄睫睡睬嗜鄙嗦愚暖盟歇暗暇照畸跨跷跳跺跪路跤跟遣蜈蜗蛾蜂蜕嗅嗡嗓署置罪罩蜀幌错锚锡锣锤锥锦键锯锰矮辞稚稠颓愁筹签简筷毁舅鼠催傻像躲魁衙微愈遥腻腰腥腮腹腺鹏腾腿鲍猿颖触解煞雏馍馏酱禀痹廓痴痰廉靖新韵意誊粮数煎塑慈煤煌满漠滇源滤滥滔溪溜漓滚溢溯滨溶溺粱滩慎誉塞寞窥窟寝谨褂裸福谬群殿辟障媳嫉嫌嫁叠缚缝缠缤剿静碧璃赘熬墙墟嘉摧赫截誓境摘摔撇聚慕暮摹蔓蔑蔡蔗蔽蔼熙蔚兢模槛榴榜榨榕歌遭酵酷酿酸碟碱碳磁愿需辖辗雌裳颗瞅墅嗽踊蜻蜡蝇蜘蝉嘛嘀赚锹锻镀舞舔稳熏箕算箩管箫舆僚僧鼻魄魅貌膜膊膀鲜疑孵馒裹敲豪膏遮腐瘩瘟瘦辣彰竭端旗精粹歉弊熄熔煽潇漆漱漂漫滴漾演漏慢慷寨赛寡察蜜寥谭肇褐褪谱隧嫩翠熊凳骡缩慧撵撕撒撩趣趟撑撮撬播擒墩撞撤增撰聪鞋鞍蕉蕊蔬蕴横槽樱橡樟橄敷豌飘醋醇醉磕磊磅碾震霄霉瞒题暴瞎嘻嘶嘲嘹影踢踏踩踪蝶蝴蝠蝎蝌蝗蝙嘿嘱幢墨镇镐镑靠稽稻黎稿稼箱篓箭篇僵躺僻德艘膝膛鲤鲫熟摩褒瘪瘤瘫凛颜毅糊遵憋潜澎潮潭鲨澳潘澈澜澄懂憔懊憎额翩褥谴鹤憨慰劈履豫缭撼擂操擅燕蕾薯薛薇擎薪薄颠翰噩橱橙橘整融瓢醒霍霎辙冀餐嘴踱蹄蹂蟆螃器噪鹦赠默黔镜赞穆篮篡篷篱儒邀衡膨雕鲸磨瘾瘸凝辨辩糙糖糕燃濒澡激懒憾懈窿壁避缰缴戴擦藉鞠藏藐檬檐檀礁磷霜霞瞭瞧瞬瞳瞩瞪曙蹋蹈螺蟋蟀嚎赡穗魏簧簇繁徽爵朦臊鳄癌辫赢糟糠燥懦豁臀臂翼骤藕鞭藤覆瞻蹦嚣镰翻鳍鹰瀑襟璧戳孽警蘑藻攀曝蹲蹭蹬巅簸簿蟹颤靡癣瓣羹鳖爆疆鬓壤馨耀躁蠕嚼嚷巍籍鳞魔糯灌譬蠢霸露霹躏黯髓赣囊镶瓤罐矗乂乜兀弋孑孓幺亓韦廿丏卅仄厄仃仉仂兮刈爻卞闩讣尹夬爿毋邗邛艽艿札叵匝丕匜劢卟叱叻仨仕仟仡仫仞卮氐犰刍邝邙汀讦讧讪讫尻阡尕弁驭匡耒玎玑邢圩圬圭扦圪圳圹扪圮圯芊芍芄芨芑芎芗亘厍夼戍尥乩旯曳岌屺凼囡钇缶氘氖牝伎伛伢佤仵伥伧伉伫囟汆刖夙旮刎犷犸舛凫邬饧汕汔汐汲汜汊忖忏讴讵祁讷聿艮厾阱阮阪丞妁牟纡纣纥纨玕玙抟抔圻坂坍坞抃抉㧐芫邯芸芾苈苣芷芮苋芼苌苁芩芪芡芟苄苎苡杌杓杞杈忑孛邴邳矶奁豕忒欤轫迓邶忐卣邺旰呋呒呓呔呖呃旸吡町虬呗吽吣吲帏岐岈岘岑岚兕囵囫钊钋钌迕氙氚牤佞邱攸佚佝佟佗伽彷佘佥孚豸坌肟邸奂劬狄狁鸠邹饨饩饪饫饬亨庑庋疔疖肓闱闳闵羌炀沣沅沔沤沌沏沚汩汨沂汾沨汴汶沆沩泐怃怄忡忤忾怅忻忪怆忭忸诂诃诅诋诌诏诒孜陇陀陂陉妍妩妪妣妊妗妫妞姒妤邵劭刭甬邰纭纰纴纶纾玮玡玭玠玢玥玦盂忝匦坩抨拤坫拈垆抻劼拃拊坼坻㧟坨坭抿坳耶苷苯苤茏苫苜苴苒苘茌苻苓茚茆茑茓茔茕茀苕枥枇杪杳枧杵枨枞枋杻杷杼矸砀刳奄瓯殁郏轭郅鸢盱昊昙杲昃咂呸昕昀旻昉炅咔畀虮咀呷黾呱呤咚咆咛呶呣呦咝岢岿岬岫帙岣峁刿迥岷剀帔峄沓囹罔钍钎钏钒钕钗邾迮牦竺迤佶佬佰侑侉臾岱侗侃侏侩佻佾侪佼佯侬帛阜侔徂刽郄怂籴瓮戗肼䏝肽肱肫剁迩郇狙狎狍狒咎炙枭饯饴冽冼庖疠疝疡兖妾劾炜𬉼炖炘炝炔泔沭泷泸泱泅泗泠泺泖泫泮沱泯泓泾怙怵怦怛怏怍㤘怩怫怿宕穹宓诓诔诖诘戾诙戽郓衩祆祎祉祇诛诜诟诠诣诤诧诨诩戕孢亟陔妲妯姗帑弩孥驽虱迦迨绀绁绂驷驸绉绌驿骀甾珏珐珂珑玳珀顸珉珈拮垭挝垣挞垤赳贲垱垌郝垧垓挦垠茜荚荑贳荜莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茨垩荥荦荨荩剋荪茹荬荮柰栉柯柘栊柩枰栌柙枵柚枳柞柝栀柢栎枸柈柁枷柽剌酊郦甭砗砘砒斫砭砜奎耷虺殂殇殄殆轱轲轳轶轸虿毖觇尜哐眄眍𠳐郢眇眊眈禺哂咴曷昴昱昵咦哓哔畎毗呲胄畋畈虼虻盅咣哕剐郧咻囿咿哌哙哚咯咩咤哝哏哞峙峣罘帧峒峤峋峥贶钚钛钡钣钤钨钫钯氡氟牯郜秕秭竽笈笃俦俨俅俪叟垡牮俣俚皈俑俟逅徇徉舢俞郗俎郤爰郛瓴胨胪胛胂胙胍胗胝朐胫鸨匍狨狯飑狩狲訇逄昝饷饸饹胤孪娈弈奕庥疬疣疥疭庠竑彦飒闼闾闿阂羑迸籼酋炳炻炽炯烀炷烃洱洹洧洌浃洇洄洙涎洎洫浍洮洵浒浔浕洳恸恓恹恫恺恻恂恪恽宥扃衲衽衿袂祛祜祓祚诮祗祢诰诳鸩昶郡咫弭牁胥陛陟娅姮娆姝姣姘姹怼羿炱矜绔骁骅绗绛骈耖挈珥珙顼珰珩珧珣珞琤珲敖恚埔埕埘埙埚挹耆耄埒捋贽垸捃盍荸莆莳莴莪莠莓莜莅荼莩荽莸荻莘莎莞莨鸪莼栲栳郴桓桡桎桢桤梃栝桕桁桧桅栟桉栩逑逋彧鬲豇酐逦厝孬砝砹砺砧砷砟砼砥砣剞砻轼轾辂鸫趸龀鸬虔逍眬唛晟眩眙哧哽唔晁晏鸮趵趿畛蚨蚜蚍蚋蚬蚝蚧唢圄唣唏盎唑崂崃罡罟峪觊赅钰钲钴钵钹钺钽钼钿铀铂铄铆铈铉铊铋铌铍䥽铎氩氤氦毪舐秣秫盉笄笕笊笏笆俸倩俵偌俳俶倬倏恁倭倪俾倜隼隽倌倥臬皋郫倨衄颀徕舫釜奚衾胯胱胴胭脍胼朕脒胺鸱玺鸲狷猁狳猃狺逖桀袅饽凇栾挛亳疳疴疸疽痈疱痂痉衮凋颃恣旆旄旃阃阄訚阆恙粑朔郸烜烨烩烊剡郯烬涑浯涞涟娑涅涠浞涓浥涔浜浠浣浚悚悭悝悒悌悛宸窈剜诹冢诼袒袢祯诿谀谂谄谇屐屙陬勐奘牂蚩陲姬娠娌娉娲娩娴娣娓婀畚逡绠骊绡骋绥绦绨骎邕鸶彗耜焘舂琏琇麸揶埴埯捯掳掴埸埵赧埤捭逵埝堋堍掬鸷掖捽掊堉掸捩掮悫埭埽掇掼聃菁萁菘堇萘萋菽菖萜萸萑棻菔菟萏萃菏菹菪菅菀萦菰菡梵梿梏觋桴桷梓棁桫棂啬郾匮敕豉鄄酞酚戛硎硭硒硖硗硐硇硌鸸瓠匏厩龚殒殓殍赉雩辄堑眭眦啧晡晤眺眵眸圊喏喵啉勖晞唵晗冕啭畦趺啮跄蚶蛄蛎蛆蚰蛊圉蚱蛉蛏蚴啁啕唿啐唼唷啖啵啶啷唳唰啜帻崚崦帼崮崤崆赇赈赊铑铒铗铙铟铠铡铢铣铤铧铨铩铪铫铬铮铯铰铱铳铵铷氪牾鸹秾逶笺筇笸笪笮笠笥笤笳笾笞偾偃偕偈傀偬偻皑皎鸻徜舸舻舴舷龛翎脬脘脲匐猗猡猞猝斛猕馗馃馄鸾孰庹庾痔痍疵翊旌旎袤阇阈阉阊阋阍阏羟粝粕敝焐烯焓烽焖烷焗渍渚淇淅淞渎涿淖挲淠涸渑淦淝淬涪淙涫渌淄惬悻悱惝惘悸惆惚惇惮窕谌谏扈皲谑裆袷裉谒谔谕谖谗谙谛谝逯郿隈粜隍隗婧婊婕娼婢婵胬袈翌恿欸绫骐绮绯绱骒绲骓绶绺绻绾骖缁耠琫琵琶琪瑛琦琥琨靓琰琮琯琬琛琚辇鼋揳堞搽揸揠堙趄揖颉塄揿耋揄蛩蛰塆摒揆掾聒葑葚靰靸葳葺葸萼葆葩葶蒌萱戟葭楮棼椟棹椤棰赍椋椁椪棣椐鹁覃酤酢酡鹂厥殚殛雯雱辊辋椠辍辎斐睄睑睇睃戢喋嗒喃喱喹晷喈跖跗跞跚跎跏跆蛱蛲蛭蛳蛐蛔蛞蛴蛟蛘喁喟啾嗖喑嗟喽嗞喀喔喙嵘嵖崴遄詈嵎崽嵬嵛嵯嵝嵫幄嵋赕铻铼铿锃锂锆锇锉锏锑锒锔锕掣矬氰毳毽犊犄犋鹄犍嵇黍稃稂筚筵筌傣傈舄牍傥傧遑傩遁徨媭畲弑颌翕釉鹆舜貂腈腌腓腆腴腑腚腱鱿鲀鲂颍猢猹猥飓觞觚猱颎飧馇馊亵脔裒痣痨痦痞痤痫痧赓竦瓿啻颏鹇阑阒阕粞遒孳焯焜焙焱鹈湛渫湮湎湜渭湍湫溲湟溆湲湔湉渥湄滁愠惺愦惴愀愎愔喾寐谟扉裢裎裥祾祺谠幂谡谥谧遐孱弼巽骘媪媛婷巯翚皴婺骛缂缃缄彘缇缈缌缑缒缗飨耢瑚瑁瑜瑗瑄瑕遨骜韫髡塬鄢趔趑摅摁蜇搋搪搐搛搠摈彀毂搦搡蓁戡蓍鄞靳蓐蓦鹋蒽蓓蓖蓊蒯蓟蓑蒿蒺蓠蒟蒡蒹蒴蒗蓥颐楔楠楂楝楫楸椴槌楯皙榈槎榉楦楣楹椽裘剽甄酮酰酯酩蜃碛碓硼碉碚碇碜鹌辏龃龅訾粲虞睚嗪韪嗷嗉睨睢雎睥嘟嗑嗫嗬嗔嗝戥嗄煦暄遢暌跬跶跸跐跣跹跻蛸蜊蜍蜉蜣畹蛹嗣嗯嗥嗲嗳嗌嗍嗨嗐嗤嗵罨嵊嵩嵴骰锗锛锜锝锞锟锢锨锩锭锱雉氲犏歃稞稗稔筠筢筮筲筱牒煲敫徭愆艄觎毹貊貅貉颔腠腩腼腭腧塍媵詹鲅鲆鲇鲈稣鲋鲐肄鹐飕觥遛馐鹑亶瘃痱痼痿瘐瘁瘆麂裔歆旒雍阖阗阙羧豢粳猷煳煜煨煅煊煸煺滟溱溘漭滢溥溧溽裟溻溷滗滫溴滏滃滦溏滂滓溟滪愫慑慊鲎骞窦窠窣裱褚裨裾裰禊谩谪媾嫫媲嫒嫔媸缙缜缛辔骝缟缡缢缣骟耥璈瑶瑭獒觏慝嫠韬叆髦摽墁撂摞撄翥踅摭墉墒榖綦蔫蔷靺靼鞅靿甍蔸蔟蔺戬蕖蔻蓿斡鹕蓼榛榧榻榫榭槔榱槁槟槠榷僰酽酶酹厮碡碴碣碲磋臧豨殡霆霁辕蜚裴翡龇龈睿䁖睽嘞嘈嘌嘁嘎暧暝踌踉蜞蜥蜮蝈蜴蜱蜩蜷蜿螂蜢嘘嘡鹗嘣嘤嘚嗾嘧罴罱幔嶂幛赙罂骷骶鹘锲锴锶锷锸锵镁镂犒箐箦箧箍箸箬箅箪箔箜箢箓毓僖儆僳僭劁僮魃魆睾艋鄱膈膑鲑鲔鲚鲛鲟獐觫雒夤馑銮塾麽瘌瘊瘘瘙廖韶旖膂阚鄯鲞粿粼粽糁槊鹚熘熥潢漕滹漯漶潋潴漪漉漳漩澉潍慵搴窨寤綮谮褡褙褓褛褊谯谰谲暨屣鹛嫣嫱嫖嫦嫚嫘嫡鼐翟瞀鹜骠缥缦缧缨骢缪缫耦耧瑾璜璀璎璁璋璇奭髯髫撷撅赭撸鋆撙撺墀聩觐鞑蕙鞒蕈蕨蕤蕞蕺瞢蕃蕲赜槿樯槭樗樘樊槲醌醅靥魇餍磔磙霈辘龉龊觑瞌瞋瞑嘭噎噶颙暹噘踔踝踟踒踬踮踯踺踞蝽蝾蝻蝰蝮螋蝓蝣蝼噗嘬颚噍噢噙噜噌噔颛幞幡嶙嶝骺骼骸镊镉镌镍镏镒镓镔稷箴篑篁篌篆牖儋徵磐虢鹞膘滕鲠鲡鲢鲣鲥鲧鲩獗獠觯馓馔麾廛瘛瘼瘢瘠齑羯羰𥻗遴糌糍糅熜熵熠澍澌潸潦潲鋈潟潼潺憬憧寮窳谳褴褟褫谵熨屦嬉勰戮蝥缬缮缯骣畿耩耨耪璞璟靛璠璘聱螯髻髭髹擀熹甏擞縠磬颞蕻鞘颟薤薨檠薏薮薜薅樾橛橇樵檎橹樽樨橼墼橐翮醛醐醍醚磲赝飙殪霖霏霓錾辚臻遽氅瞟瞠瞰嚄嚆噤暾蹀踹踵踽蹉蹁螨蟒螈螅螭螠螟噱噬噫噻噼罹圜䦃镖镗镘镚镛镝镞镠氇氆憩穑篝篥篦篪篙盥劓翱魉魈徼歙膳膦膙鲮鲱鲲鲳鲴鲵鲷鲻獴獭獬邂鹧廨赟瘰廪瘿瘵瘴癃瘳斓麇麈嬴壅羲糗瞥甑燎燠燔燧濑濉潞澧澹澥澶濂褰寰窸褶禧嬖犟隰嬗颡缱缲缳璨璩璐璪螫擤壕觳罄擢薹鞡鞬薷薰藓藁檄檩懋醢翳礅磴鹩龋龌豳壑黻嚏嚅蹑蹒蹊蟥螬螵疃螳蟑嚓羁罽罾嶷黜黝髁髀镡镢镣镦镧镩镪镫罅黏簌篾篼簖簋鼢黛儡鹪鼾皤魍龠繇貘邈貔臌膻臆臃鲼鲽鳀鳃鳅鳇鳊螽燮鹫襄糜縻膺癍麋懑濡濮濞濠濯蹇謇邃襁檗擘孺隳嬷蟊鹬鍪鏊鳌鬈鬃瞽鞯鞨鞫鞧鞣藜藠藩醪蹙礓燹餮瞿曛颢曜躇蹚鹭蟛蟪蟠蟮鹮黠黟髅髂镬镭镯馥簟簪鼬雠艟鳎鳏鳐癞癔癜癖糨蹩鎏懵彝邋鬏攉攒鞲鞴藿蘧蘅麓醮醯酃霪霭霨黼嚯蹰蹶蹽蹼蹴蹾蹿蠖蠓蟾蠊黢髋髌镲籀籁齁魑艨鳓鳔鳕鳗鳙麒鏖羸㸆瀚瀣瀛襦谶襞骥缵瓒攘蘩蘖醴霰酆矍曦躅鼍巉黩黥黪镳镴黧纂璺鼯臜鳜鳝鳟獾孀骧瓘鼙醺礴颦曩鳢癫麝夔爝灏禳鐾羼蠡耱懿蘸鹳霾氍饕躐髑镵穰饔鬻鬟趱攫攥颧躜鼹癯麟蠲蠹躞衢鑫灞襻纛鬣攮囔馕戆爨齉亍尢彳卬殳𠙶毌邘戋圢氕伋仝冮氿汈氾忉宄𬣙讱扞圲圫芏芃朳朸𨙸邨吒吖屼屾辿钆仳伣伈癿甪邠犴冱邡闫𬇕汋䜣讻𬣞孖𬘓纩玒玓玘玚刬𫭟坜坉扽𫭢坋扺㧑毐芰芣苊苉芘芴芠𫇭芤杕杙杄杧杩尪尨轪𫐄坒芈旴旵呙㕮岍𫵷岠岜呇冏觃岙伾㑇伭佖伲佁飏狃闶汧汫𣲘𣲗沄沘𬇙汭㳇沇忮忳忺𬣡祃诇邲诎诐屃𫸩岊阽䢺阼妧妘𨚕纮驲𫘜纻𬘘𫘝纼玤玞玱玟邽邿坥坰坬坽弆耵䢼𦭜茋苧苾苠枅㭎枘枍矼矻匼𬨂𬀩𬀪旿昇昄昒昈咉咇咍岵岽岨岞峂㟃囷𬬩钐钔钖牥佴垈侁侹佸佺隹㑊侂佽侘郈舠郐郃攽肭肸肷狉狝饳忞於炌炆泙沺泂泜泃泇怊峃穸祋祊𫍣𬣳𬩽鸤弢弨陑𬮿陎𬯀卺乸妭姈𫰛迳叕𬳵驵𬳶䌹驺𫠊绋绐砉耔㛃玶珇珅𬍛珋玹珌玿韨垚垯垙垲埏垍耇鿍垎垴垟垞挓垵垏拶荖荁荙荛茈茽荄茺𬜬荓茳𦰡茛荭㭕柷柃柊枹栐柖郚剅䴓迺厖砆砑砄耏奓䶮轵轷轹轺昺𪾢昽盷咡咺昳昣哒昤昫昡咥昪虷虸哃峘耑峛𪨰峗峧帡钘𫓧钜𬬮𬬱𬬭钪钬钭矧秬俫舁俜俙俍垕衎舣弇侴鸧䏡胠𦙶胈胩胣朏飐訄饻庤疢炣炟㶲洭洘洓洿㳚泚浈浉洸洑洢洈洚洺洨浐㳘洴洣恔宬窀扂袆祏祐祕叚陧陞娀姞姱姤姶姽枲绖骃𬘡𬳽𬘩𫄧彖骉恝珪珛珹琊玼珖𪟝珽珦珫珒𬍤珢珕珝𫭼埗垾垺埆垿埌埇莰茝𬜯鄀莶莝䓖莙栻桠𬂩桄梠栴梴栒酎酏𫠆砵砠砫砬硁恧翃郪𨐈辀辁𬌗剕赀哢晅晊唝哳哱冔晔晐晖畖蚄蚆𫑡帱崁峿𪨶崄帨崀赆𬬸钷𬬻𬬹𬬿𬭁眚甡笫倻倴脩倮倕倞𫢸倓倧衃虒舭舯舥瓞鬯鸰脎朓胲虓鱽狴峱狻眢𫗧勍痄疰痃竘羖羓桊敉烠烔烶烻𬊈涍浡浭浬涄涢涐浰浟浛浼浲涘悈悃悢𬒈宧窅窊窎扅扆袪袗袯祧隺堲疍𨺙陴烝砮㛚哿翀翂剟𬳿𫄨绤骍𬘫䂮琎珸珵琄琈琀珺掭堎堐埼掎埫堌晢𫮃掞埪壸㙍聍菝萚菥莿䓫勚䓬萆菂菍菼萣䓨菉䓛梼梽桲梾桯梣梌桹敔厣硔鿎硙硚硊硍勔䴕龁逴唪啫翈㫰晙畤𬱖趼跂蛃蚲𬟽蚺啴䎃崧崟崞崒崌崡铏𫓯𫟹铕𫟼铖铘铚铞铥铴牻牿稆笱笯偰偡鸺偭偲偁㿠鄅偓徛衒舳舲鸼悆鄃瓻䝙脶脞脟䏲鱾猇猊猄觖𠅤庱庼庳痓䴔竫堃阌羝羕焆烺焌淏𬇹淟淜淴淯湴涴𬍡㥄惛惔悰惙寁逭𬤇𫍯袼裈祲𬤊𫍲谞艴弸弶𬯎隃婞娵婼媖婳婍婌婫婤婘婠𬘬𬘭𬴂𫘦绹𫟅𬘯骕𫘧絜珷琲琡琟琔琭堾堼揕㙘堧喆堨塅堠絷𪣻𡎚葜惎萳葙靬葴蒇蒈鄚蒉蓇萩蒐葰葎鄑蒎葖蒄萹棤棽棫椓椑𬃊鹀椆棓棬棪椀楗𬷕甦酦觌奡皕硪欹詟𫐐辌棐龂𬹼黹牚睎晫晪晱𧿹蛑畯斝喤崶嵁𫶇崾嵅崿嵚翙𫖮圌圐赑淼赒鿏铹𬭊铽𨱇𫓶锊锍锎𬭎锓犇颋稌筀筘筜筥筅傃傉翛傒傕舾畬𫖯脿腘䐃腙腒𬱟鲃猰𫛭猯㺄馉凓鄗𫷷廋廆鄌粢遆旐𬮱焞𬊤欻𣸣溚溁湝渰湓㴔渟溠渼溇湣湑溞愐愃敩甯棨扊裣祼婻媆媞㛹媓媂媄毵矞𬴃𫘨缊缐骙瑃瑓瑅瑆䴖瑖瑝瑔瑀𤧛瑳瑂嶅瑑遘髢塥堽赪摛塝搒搌蒱蒨蓏蔀蓢蓂蒻蓣椹楪榃榅楒楞楩榇椸楙歅𬪩碃碏𬒔碈䃅硿鄠辒𬨎𫐓龆觜䣘暕鹍𫫇㬊暅跱蜐蜎嵲赗骱锖𫓹锘锳锧锪𬭚锫锬𬭛稑稙䅟𬕂筻筼筶筦筤傺鹎僇艅艉谼貆腽腨腯鲉鲊鲌䲟𬶋𬶍鲏雊猺飔觟𦝼馌裛廒瘀瘅鄘鹒鄜麀鄣阘𫔶煁煃煴煋煟煓滠溍溹滆滉溦溵漷滧滘滍愭慥慆塱𫌀裼禋禔禘禒谫鹔𫖳愍嫄媱戤勠戣𫘪𫘬缞耤瑧𫞩瑨瑱瑷瑢斠摏墕墈墐墘摴銎𡐓墚撖𪤗靽鞁蔌蔈蓰蔹蔊嘏榰榑槚𣗋槜榍疐𬸘酺酾酲酴碶䃎𬒗碨𥔲碹碥劂𫚖䴗夥瞍鹖㬎跽蜾幖嶍圙𨱏锺锼锽𬭤锾锿镃镄镅馝鹙箨箖劄僬僦僔僎槃㙦鲒鲕𫚕鲖鲗鲘鲙𬶐𬶏𩽾夐獍飗𬸚凘廑廙瘗瘥瘕鲝鄫熇漹漖潆漤潩漼漴㽏漈漋漻慬窬窭㮾𬤝褕禛禚隩嫕嫭嫜嫪𬙂㻬麹璆漦叇墣墦墡劐薁蕰蔃鼒槱鹝磏磉殣慭霅暵暲暶踦踣䗖蝘蝲蝤噇噂噀罶嶲嶓㠇嶟嶒镆镈镋镎𬭩镕稹儇皞皛䴘艎艏鹟𩾃鲦鲪鲬橥觭鹠鹡糇糈翦鹢鹣熛潖潵㵐澂澛瑬潽潾潏憭憕𬸣戭褯禤𫍽嫽遹𬴊璥璲璒憙擐鄹薳鞔黇𬞟蕗薢蕹橞橑橦醑觱磡𥕢磜豮𫟦𬺈𫠜鹾虤暿曌曈㬚蹅踶䗛螗疁㠓幪𪩘嶦𬭬𨱑𬭯馞穄篚篯簉鼽衠盦螣縢鲭鲯鲰鲺鲹𫗴亸癀瘭𬸦羱糒燋熻燊燚燏濩濋澪澽澴澭澼憷憺懔黉嬛鹨翯𫄷璱𤩽璬璮髽擿薿薸檑櫆檞醨繄磹磻瞫瞵蹐蟏㘎𬭳镤𬭶𫔍镥镨𬭸𨱔𬭼𫔎矰穙穜穟簕簃簏儦魋斶艚𬸪谿䲠𬶟鲾𬶠鲿鳁鳂鳈鳉獯䗪馘襕襚𬶨螱甓嬬嬥𦈡𫄸瓀釐鬶爇鞳鞮𬟁藟藦藨鹲檫黡礞礌𥖨蹢蹜蟫䗴嚚髃镮镱酂馧簠簝簰鼫鼩皦臑䲢鳑鳒鹱鹯癗𦒍旞翷冁䎖瀔瀍瀌襜䴙𬙊嚭㰀鬷醭蹯蠋翾鳘儳儴鼗𬶭𩾌鳚鳛麑麖蠃彟嬿鬒蘘欂醵颥甗𨟠巇酅髎犨𬶮𨭉㸌爔瀱瀹瀼瀵襫孅骦𬙋耰𤫉瓖鬘趯𬺓罍鼱鳠鳡鳣爟爚灈韂糵蘼礵鹴躔皭龢鳤亹籥鼷𫚭玃醾齇觿蠼後丟並亂亙亞伕佇佔來併侖俠侶係倣倖倆們倀個倫倉偺偽偉偵側傢備傑傖傘傭債傳僅傾傷傯僥僕僑僱億儀價儂儈儉儘儔儐優償儲儷儼兇兌兒兗內兩冊冑凍凜凱別刪剎則剛剝剴創剷劃劇劉劍劑勁務動勞勝勛勦勢勵勸勻匯匱區協卹卻厭厲參叢吋呎吳呂吶員啞問唸啣喪單喲喚喬嗎嗇嗚嗆嘗嘔嘆嘍嘖嘮嘩噓噴嘯嘰噹噸噥噯嚀嚐嚇嚕嚮嚥嚨嚶嚴囁囀囂囈囉囌囑囪國圍園圓團圖堅堊執堯場報塗塚塭塊塢塵墊塹墳墜墮墾壇壓壙壘壞壟壢壩壯壺壽夠夢夾奐奧奪奩奮妝姍妳姪姦娛婁婦媽媼嫗嫻嬋嫵嬌嬝嬰嬪嬤嬸孫學孿宮寧實寢寬審寫寵寶專將尋對導尷屆屍屜屢層屬岡峽島崢崑崙嵐嶄嶇嶼嶺嶽巔巒巖帥師帶帳幀幣幗幟幫幹幾庫廁廂廈廢廚廟廝廣廠龐廬廳弒弔張強彆彈彌彎彙彥彫彿徑從復徬徹恆恥悅悽悵惡悶愜惻惱愛慄慍愾愴慇態慣慟慚慘慶慮憂慼慫慾憐憫憚憤憲憑憊懍憶應懇懣懲懷懶懸懺懼懾戀戰戲戶拋拚挾捲捱掃掛捫掄掙採捨揀揮換揚搾損搶搖搗摟摺摑摯撲撈撐撥撓撫撚擁擋撻據擄擇撿擔擊擠擰擬擱擴擲擾攆擺擻攏攔攙攝攜攤攣攪攬敗啟敘敵數斂斃斬斷時晉晝暉暈暢暫曆曉曖曠書勗會朧朮東柵枴桿梱棄梔條梟棗棟棧棲業極楊楨楓榮槓構槍樣槨樁樞標樓槳樂樅樸樺橫樹橢橋機檔檢檜櫛檳櫃檻檸櫂櫥櫝櫚櫓櫻欄權欖欽歐歟歡歲歷歸歿殘殤殮殯殲殺殼毀毆氣氫氳汙決沖沒況洶涇涼淺淵淒淚淪淨湧湊減渦湯測渾渙溝滅溼溫準滄滾漬漢滿滯漸漲漣滬漁滲滌漿潑潔澆潛潰潤澗澱濃澤濁濘濱濟濛濤濫澀濬瀉瀋濾瀆濺瀏瀟瀨瀝瀕瀾瀰灑灘灣灤災為烏無煙煩煉煬煥熱熾燉燐燒燈燙燜燄營燦燭燬燴燻爍爐爛爭爺爾牆牘牠牴牽犖犛犢犧狀狹狽猓猙猶獅獄獎獨獰獲獷獵獸獺獻玀玨珮現琍琺瑯琿瑤瑣瑪瑩璣環璦璽瓊瓏甌甕產甽畝畢異畫當疇疊疋痙痲痺瘧瘍瘋瘉瘓瘡癆療癘癒癢癥癩癮癬癱癲發皚皰皺盃盜盞盡監盤盧盪眾睏睞睪睜瞇瞞矇矓矚矯矽硃硯碩確碼磚磺磯礎礙礦礪礬礫祿禎禍禦禪禮禱萬禿稈稅稜稟種稱穀積穎穌穡穢穫穩窪窩窯窮窺竄竅竇竊競筆筍節箋箝箏範簑築篤篛篩簍簫簞簣簡簾簽簷籌籃籐籠籟籤籬籮籲粵糞糢糧糸糾紂紅紀紉紇約紡紗紋純紐紕級紜納紙紛絆絃統紮紹紼絀細紳組終絞結絨絕絲絡給絢經絹綑綁綏綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇締練緯緻緘緬緝編緣線緞緩綞縊縑縈縛縣縮績繆縷縲繃縫總縱繅織繕繞繚繡繫繭繹繩繪辮繽繼纏續纓纖纜缽罈罰罵罷羅羈羋義羨羶習翹聖聞聲聰聯聳職聶聾聽肅脅脈脣脫腎脹腸腳腫腦膠膚膩膿膽臉膾臍臏臘臚臟臥臨臺與興舉舊舨艙艦艱芻荊茲莢莖莊菸華菴萊葷葦葉萵蓆蒞蓋蓀蒼蓮蔭蔣蔔蔥蕩蕭蕪薑薔薩藍藝藪藥藹藺蘆蘋蘇蘊蘗蘭蘚蘿處虛虜號虧蚵蛻蝕蝦蝸蝨螞螢螻蟈蟯蟬蟲蟻蠅蠍蠔蠣蠟蠱蠶蠻術衛衝袞補裝裡裊製複褲褻褸襠襖襤襪襲襯見覓規視親覦覬覲覺覽觀觴觸計訂訃記訐討訌訕訊託訓訖訪訝訣訥許設訟訛註詠評詞証詁詔詛詐詆訴診詫該詳試詩詰誇詼詣誠話誅詭詢詮詬誦誌語誣認誡誤說誥誨誘誑誼諒談諄誕請諸課諉諂調誰論諍諦諺諫諱謀諜諧諮諾謁謂諷諭謎謗謙講謊謠謝謄謨謹謬譁譜識證譚譎譏議譯譴護譽讀變讓讒讖讚豈豎豐豔豬貍貓貝貞負財貢販責貫貨貪貧貯貼貳貽賁費賀貴買貶貿貸賊資賈賄貲賃賂賅賓賑賒賠賞賦賤賬賭賢賣賜質賴賺賽購贅贈贊贏贍贓贖贗贛趙趕趨跡跼踫踐踴蹣蹤蹺躉躂躊躍躑躡躪軀車軋軍軌軒軔軛軟軻軸軼較載軾輊輔輒輕輓輝輛輟輩輦輪輜輻輯輸轄輾轂轅輿轉轍轔轎轟轡辦辭辯農迆迴這連逕週進運遊達違過遠遜遙遞適遷選遲遼遺還邁邇邊邐邏郵鄉鄒鄰鄭鄧醃醣醞醜醫醬釀釁釋釘針釗釵釦釣釧鈔鈣鈕鈉鈞鈍鈐鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉸銬銀銅銘銖鉻銓銜鋅銻銷鋪鋤鋁銳銼鋒錠錶鋸錳錯錢鋼錫錄錚錐錦鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鎔鎊鎖鎢鎳鎮鏡鏑鏟鏃鏈鏜鏝鏢鏍鏘鏤鏗鐘鐃鏽鐮鐳鐵鐺鐸鐲鑄鑑鑒鑣鑠鑲鑰鑽鑾鑼鑿長門閂閃閉閔閏開閑間閒閘閡閨閩閣閥閤閭閱閻闊闋闌闈闆闔闖闐關闡闢陣陝陳陸陰隊階陽隕際隨險隱隴隸隻雋雖雜雙雛雞離難雲電霑霧霽靂靈靄靜靦靨鞏鞦韃韁韆韋韌韓韜韻響頁頂頃項順須預頑頓頊頒頌頗領頡頰頸頻頷頭頹頤顆額顏題顎顓類願顛顧顫顯顰顱風颯颱颳颶颺颼飄飛飢飪飯飩飲飭飼飴飽飾餃餅餌餉養餓餒餘館餞餛餡餵餾餿餽饅饒饑饜饞馬馮馭馳馱馴駁駝駐駟駛駑駕駒駙駭駢駱騁駿騎騖騙騫騰騷驅驃驀騾驕驚驛驗驟驢驥驪骯髏髒體髮鬆鬍鬚鬢鬥鬧鬨鬱魘魚魷魯鮑鮮鮫鮪鯊鯉鯽鯨鯧鰓鰍鰭鰥鱉鰱鰾鰻鱔鱗鱖鱷鱸鳥鳩鳴鳶鳳鴆鴉鴕鴣鴦鴨鴒鴛鴻鴿鵑鵝鵠鶉鵡鵲鵪鵬鶯鶴鷂鷓鷗鷥鷹鷺鸚鸞鹹鹼鹽麗麥麩麴麵麼黃點黨黴黷鼇鼕鼴齊齋齒齟齣齡齜齦齬齪齷齲龍龔龜裏佈濕堿縴輥崗烴繳樑吪蹟墻艷滸勳鷊饋嚦銨鹵曇撾鄆銹摻曬澇鰲噠冪薦燾熒氈羥蕕饁訶鏵飀憓戔鈦鋰嚙氬鋇巰鮒錮喓捄鉬戩褘誹鍔闓頲詒閹魴謚洩轆餚舖闕嗶淩軹檽銑縐愷攢樀鎌鎬贄魛灝髖劊溮翬蹠彊曨檯癟剄懨揌簦諢罃薊鉅漚鍺鍘鐐廄銫憖灩瑋鉦鑊塈寔酈嗩澮燁脛雰鴇澦磧薌釩餑瀘絳纍貰鎵鑷饃齎砩鯕唄僨卌撟滎賡鉚滀濰莧蕎鈺鰣搳潷瑒轢頎晛癭蒔蝟襌鄺釔鯪鷲嘜玁糶紈憮摳纔薺轤鐠餔齶剚幠湋潓綌緋驤淶燼碫縹釙鉞櫟紝謳鄲闞頜鱒熤礡釷鋯鍶鎧韞饌鯰僂愬瓚碔緱蟿鋏鑕钁凊塽揅撣癙禨襏蹌郟鈁銥銣鞿鯔鸕殫汏煒緲縞翽荳蘄詎謾鈀鉍鑞隄鯗鱧鳧鶻俁俛厔嵒燿盩禕纘覷訑訢諛謅鈹鎘駸鳲鴝掱攄榤綷綹緙謐謫贐鄴錕隤鵷鶵奼峴怹梩浹碁○歎峇飆擡诶〇揹玅㨃㑚𪨊屌裋説爲喫顔衆牀絶旣槪卽産駡麪奬躱閲朶誒啓覈竈艶癡痠薈孃鋭箇僞糉滷嬡螄襬侷壎柺巘剮廏讞刴跥龕鵰暘鉢㞞蓽圇躋謡諏贇蟶噁儕曁墶鶩繮頽廡嬈斕躥皁衊顴殞饈絝堝謔閆譭鐫苪筳㠯魎尛搥砲鎚鮭鼂肏冖讠礻匚纟廴囗辶冂丷凵龰扌罒刂丌丂宀𠂤厶丶艹𧘇卩乚夂阝彡钅咼僉巛疒𬺰攴𠂇犭丿衤黽氵亻彐饣丨乀ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩㄪㄫㄬㄭ぀ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖ゗゘゙゚゛゜ゝゞゟ゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ‐‑‒–—―‖‗‘’‚‛“”„‟†‡•‣․‥…‧ ‰‱′″‴‵‶‷‸‹›※‼‽‾‿⁀⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁔⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞、。〃〄々〆〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟〠〡〢〣〤〥〦〧〨〩〪〭〮〯〫〬〰〱〲〳〴〵〶〷〸〹〺〻〼□!?:;,§×· ,.?!:;'[]{}<>/()@#$%^&*-_+=€ÄÖÜäöü~¡¢£¤¥¨ª«¬°±²³µ¶º»¿ÀÁÂÃÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕØÙÚÛÝÞßàáâãåæçèéêëìíîïðñòóôõ÷øùúûýþÿĀāĂăĄćĈċčĎđĒēĔėĘĚěĜĞġģĤħĩĪīĭĮİıIJijĴķĸĺĻļĽĿŀłŃņŇʼnŋŌōŎőŒœŔŖŘŚŝŞŠţťŦũŪūŭŮűŲŴŶŸŹŻżžſƀƁƃƄƆƇƉƊƌƍƎƏƐƑƒƓƔƕƖƗƘƚƛƜƝƞƟơƣƥƦƩƫƬƮƯƱƲƳƵƷƸƺǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǧǩǪǭǮǰDZDzdzǵǸǻǼǾȀȃȄȆȇȈȋȍȎȑȒȔȖșțɑɔəɛɡʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʙʚʛʜʝʞʟʠʣʤʥʦʧʨʩʮʯΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρςστυφχϘϙϜϝẐẑ  ≠①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⓪⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾⓿⿰⿱⿲⿳⿴⿵⿶⿷⿸⿹⿺⿻〽ㄮ㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉㊊㊋㊌㊍㊎㊏㊐㊑㊒㊓㊔㊕㊖㊗㊘㊙㊚㊛㊜㊝㊞㊟㊠㊡㊢㊣㊤㊥㊦㊧㊨㊩㊪㊫㊬㊭㊮㊯㊰㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉㋊㋋㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋤㋥㋦㋧㋨㋩㋪㋫㋬㋭㋮㋯㋰㋱㋲㋳㋴㋵㋶㋷㋸㋹㋺㋻㋼㋽㋾㋿㍱㍲㍳㍴㍵㍶㎀㎁㎂㎄㎅㎇㎈㎉㎊㎋㎌㎍㎐㎑㎓㎔㎕㎗㎘㎙㎚㎛㎝㎠㎢㎤㎦㎩㎪㎬㎰㎱㎲㎴㎵㎶㎸㎺㎻㎼㎾㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏋㏌㏍㏏㏗㏘㏙㏚㏛㏜㏝㏾䷀䷁䷂䷃䷄䷅䷆䷇䷈䷉䷊䷋䷌䷍䷎䷏䷐䷑䷒䷓䷔䷕䷖䷗䷘䷙䷚䷛䷜䷝䷞䷟䷠䷡䷢䷣䷤䷥䷦䷧䷨䷩䷪䷫䷬䷭䷮䷯䷰䷱䷲䷳䷴䷵䷶䷷䷸䷹䷺䷻䷼䷽䷾䷿︰︱︳︴︵︶︷︸︹︺︻︼︽︾︿﹀﹁﹂﹃﹄﹉﹊﹋﹌﹍﹎﹏"#$%&()*+-./<=>@KO[\]^_`{|}~¢£¬ ̄¦¥←↑→↓■😀😁😂😃😄😅😆😇😈😉😋😍😎😏😐😑😒😓😗😘😙😚😞😠😡😢😥😬😭😱😴😷😻😼🙂🙄🙅🙆🙈🙉🙊🙋🙌🙏" + +function setfromstr(str) + local t = {} + for p, c in utf8.codes(str) do + t[utf8.char(c)] = true + end + return t +end + +local charset = setfromstr(str) + +function issubset(candidate, charset) + for el, _ in pairs(candidate) do + if not charset[el] then + return false + end + end + return true +end + +local function yuhao_char_first(input, env) + local b = env.engine.context:get_option("yuhao_char_first") + local l = {} + for cand in input:iter() do + local candidate = setfromstr(cand.text) + if (not b or issubset(candidate, charset)) then + yield(cand) + else + table.insert(l, cand) + end + end + -- 非常用字词后置 + for i, cand in ipairs(l) do + yield(cand) + end +end + +local function yuhao_char_only(input, env) + local b = env.engine.context:get_option("yuhao_char_only") + for cand in input:iter() do + local candidate = setfromstr(cand.text) + if (not b or issubset(candidate, charset)) then + yield(cand) + end + end +end + +return { yuhao_char_first = yuhao_char_first, yuhao_char_only = yuhao_char_only } diff --git a/beta/hotfix/lua/yuhao/yuhao_embeded_cands.lua b/beta/hotfix/lua/yuhao/yuhao_embeded_cands.lua new file mode 100644 index 0000000..9d4457f --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_embeded_cands.lua @@ -0,0 +1,284 @@ +-- 作者:王牌餅乾 +-- https://github.com/lost-melody/ +-- 转载请保留作者名 +-- Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International +--------------------------------------- + +-- 將要被返回的過濾器對象 +local embeded_cands_filter = {} + +--[[ +# xxx.schema.yaml +switches: + - name: embeded_cands + states: [ 普通, 嵌入 ] + reset: 1 +engine: + filters: + - lua_filter@*smyh.embeded_cands +key_binder: + bindings: + - { when: always, accept: "Control+Shift+E", toggle: embeded_cands } +--]] + +-- 候選序號標記 +local index_indicators = {"¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹", "⁰"} + +-- 首選/非首選格式定義 +-- Seq: 候選序號; Code: 編碼; 候選: 候選文本; Comment: 候選提示 +local first_format = "${候選}${Comment}${Seq}" +local next_format = "${候選}${Comment}${Seq}" +local separator = " " + +-- 讀取 schema.yaml 開關設置: +local option_name = "embeded_cands" + +-- 從方案配置中讀取字符串 +local function parse_conf_str(env, path, default) + local str = env.engine.schema.config:get_string(env.name_space.."/"..path) + if not str and default and #default ~= 0 then + str = default + end + return str +end + +-- 從方案配置中讀取字符串列表 +local function parse_conf_str_list(env, path, default) + local list = {} + local conf_list = env.engine.schema.config:get_list(env.name_space.."/"..path) + if conf_list then + for i = 0, conf_list.size-1 do + table.insert(list, conf_list:get_value_at(i).value) + end + elseif default then + list = default + end + return list +end + +-- 構造開關變更回調函數 +local function get_switch_handler(env, op_name) + local option + if not env.option then + option = {} + env.option = option + else + option = env.option + end + -- 返回通知回調, 當改變選項值時更新暫存的值 + return function(ctx, name) + if name == op_name then + option[name] = ctx:get_option(name) + if option[name] == nil then + -- 當選項不存在時默認爲啟用狀態 + option[name] = true + end + end + end +end + +local function compile_formatter(format) + -- "${Stash}[${候選}${Seq}]${Code}${Comment}" + -- => "%s[%s%s]%s%s" + -- => {"${Stash}", "${...}", "${...}", ...} + local pattern = "%$%{[^{}]+%}" + local verbs = {} + for s in string.gmatch(format, pattern) do + table.insert(verbs, s) + end + + local res = { + format = string.gsub(format, pattern, "%%s"), + verbs = verbs, + } + local meta = { __index = function() return "" end } + + -- {"${v1}", "${v2}", ...} + {v1: a1, v2: a2, ...} = {a1, a2, ...} + -- string.format("%s[%s%s]%s%s", a1, a2, ...) + function res:build(dict) + setmetatable(dict, meta) + local args = {} + for _, pat in ipairs(self.verbs) do + table.insert(args, dict[pat]) + end + return string.format(self.format, table.unpack(args)) + end + + return res +end + +-- 按命名空間歸類方案配置, 而不是按会話, 以减少内存佔用 +local namespaces = {} +function namespaces:init(env) + -- 讀取配置項 + if not namespaces:config(env) then + local config = {} + config.index_indicators = parse_conf_str_list(env, "index_indicators", index_indicators) + config.first_format = parse_conf_str(env, "first_format", first_format) + config.next_format = parse_conf_str(env, "next_format", next_format) + config.separator = parse_conf_str(env, "separator", separator) + config.option_name = parse_conf_str(env, "option_name") + + config.formatter = {} + config.formatter.first = compile_formatter(config.first_format) + config.formatter.next = compile_formatter(config.next_format) + namespaces:set_config(env, config) + end +end +function namespaces:set_config(env, config) + namespaces[env.name_space] = namespaces[env.name_space] or {} + namespaces[env.name_space].config = config +end +function namespaces:config(env) + return namespaces[env.name_space] and namespaces[env.name_space].config +end + +function embeded_cands_filter.init(env) + -- 讀取配置項 + local ok = pcall(namespaces.init, namespaces, env) + if not ok then + local config = {} + config.index_indicators = index_indicators + config.first_format = first_format + config.next_format = next_format + config.separator = separator + config.option_name = parse_conf_str(env, "option_name") + + config.formatter = {} + config.formatter.first = compile_formatter(config.first_format) + config.formatter.next = compile_formatter(config.next_format) + namespaces:set_config(env, config) + end + + local config = namespaces:config(env) + -- 是否指定開關 + if config.option_name and #config.option_name ~= 0 then + -- 構造回調函數 + local handler = get_switch_handler(env, config.option_name) + -- 初始化爲選項實際值, 如果設置了 reset, 則會再次觸發 handler + handler(env.engine.context, config.option_name) + -- 注册通知回調 + env.engine.context.option_update_notifier:connect(handler) + else + -- 未指定開關, 默認啓用 + config.option_name = option_name + env.option = {} + env.option[config.option_name] = true + end +end + +-- 渲染提示, 因爲提示經常有可能爲空, 抽取爲函數更昜操作 +local function render_comment(comment) + if string.match(comment, "^[ ~]") then + -- 丟棄以空格和"~"開頭的提示串, 這通常是補全提示 + comment = "" + elseif string.len(comment) ~= 0 then + comment = "["..comment.."]" + end + return comment +end + +-- 渲染單個候選項 +local function render_cand(env, seq, code, text, comment) + local formatter + if seq == 1 then + formatter = namespaces:config(env).formatter.first + else + formatter = namespaces:config(env).formatter.next + end + -- 渲染提示串 + comment = render_comment(comment) + -- 渲染提示串 + comment = render_comment(comment) + local cand = formatter:build({ + ["${Seq}"] = namespaces:config(env).index_indicators[seq], + ["${Code}"] = code, + ["${候選}"] = text, + ["${Comment}"] = comment, + }) + return cand +end + +-- 過濾器 +function embeded_cands_filter.func(input, env) + if not env.option[namespaces:config(env).option_name] then + for cand in input:iter() do + yield(cand) + end + return + end + + -- 要顯示的候選數量 + local page_size = env.engine.schema.page_size + -- 暫存當前頁候選, 然后批次送出 + local page_cands, page_rendered = {}, {} + -- 暫存索引, 首選和預編輯文本 + local index, first_cand, preedit = 0, nil, "" + + local function refresh_preedit() + if first_cand then + first_cand.preedit = table.concat(page_rendered, namespaces:config(env).separator) + -- 將暫存的一頁候選批次送出 + for _, c in ipairs(page_cands) do + yield(c) + end + end + -- 清空暫存 + first_cand, preedit = nil, "" + page_cands, page_rendered = {}, {} + end + + local hash = {} + local rank = 0 + -- 迭代器 + local iter, obj = input:iter() + -- 迭代由翻譯器輸入的候選列表 + local next = iter(obj) + while next do + -- 頁索引自增, 滿足 1 <= index <= page_size + index = index + 1 + + -- 當前遍歷候選項 + local cand = next + + -- 去除重複項 + if (not hash[cand.text]) then + hash[cand.text] = true + + if not first_cand then + -- 把首選捉出來 + first_cand = cand + end + + rank = rank + 1 + + -- 修改首選的預编輯文本, 這会作爲内嵌編碼顯示到輸入處 + preedit = render_cand(env, rank, first_cand.preedit, cand.text, cand.comment) + + -- 存入候選 + table.insert(page_cands, cand) + table.insert(page_rendered, preedit) + end + -- 遍歷完一頁候選後, 刷新預編輯文本 + if index == page_size then + refresh_preedit() + rank = 0 + end + + -- 當前候選處理完畢, 查詢下一個 + next = iter(obj) + + -- 如果當前暫存候選不足page_size但没有更多候選, 則需要刷新預編輯並送出 + if not next and index < page_size then + refresh_preedit() + end + + -- 下一頁, index歸零 + index = index % page_size + end +end + +function embeded_cands_filter.fini(env) +end + +return embeded_cands_filter diff --git a/beta/hotfix/lua/yuhao/yuhao_embeded_cands_archived.lua b/beta/hotfix/lua/yuhao/yuhao_embeded_cands_archived.lua new file mode 100644 index 0000000..ee61a70 --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_embeded_cands_archived.lua @@ -0,0 +1,176 @@ +-- 作者:王牌餅乾 +-- https://github.com/lost-melody/ +-- 转载请保留作者名 +-- Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International +--------------------------------------- + +-- 將要被返回的過濾器對象 +local embeded_cands_filter = {} + +-- 導入外部模块變量 +local yuhao_switch_vars = require("yuhao.yuhao_switch").var + +--[[ +# xxx.schema.yaml +switches: + - name: embeded_cands + states: [ 普通, 嵌入 ] + reset: 1 +engine: + filters: + - lua_filter@*smyh.embeded_cands +key_binder: + bindings: + - { when: always, accept: "Control+Shift+E", toggle: embeded_cands } +--]] + +-- 候選序號標記 +local index_indicators = {"¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹", "⁰"} + +-- 首選/非首選格式定義 +-- seq: 候選序號; code: 編碼; 候選: 候選文本; comment: 候選提示 +local first_format = "候選commentseq" +local next_format = " 候選commentseq" +local separator = "" + +-- 讀取 schema.yaml 開關設置: +local option_name = "embeded_cands" + +function embeded_cands_filter.init(env) + -- 初始化局部表變量, 並裝入env + local embeded = {} + env.embeded = embeded + local handler = function(ctx, name) + -- 通知回調, 當改變選項值時更新暫存的值 + if name == option_name then + embeded.embeded_cands = ctx:get_option(name) + if embeded.embeded_cands == nil then + -- 當選項不存在時默認爲啓用狀態 + embeded.embeded_cands = true + end + end + end + -- 初始化爲選項實際值, 如果設置了 reset, 則會再次觸發 handler + handler(env.engine.context, option_name) + -- 注册通知回調 + env.engine.context.option_update_notifier:connect(handler) +end + +-- 渲染提示, 因爲提示經常有可能爲空, 抽取爲函數更昜操作 +local function render_comment(comment) + if string.match(comment, "^[ ~]") then + -- 丟棄以空格和"~"開頭的提示串, 這通常是補全提示 + comment = "" + elseif string.len(comment) ~= 0 then + comment = "["..comment.."]" + end + return comment +end + +-- 轉義符號 `%`, 因爲該符號是 string.gsub() 後兩個參數的轉義字符 +local function escape_percent(text) + text = string.gsub(text, "%%", "%%%%") + return text +end + +-- 渲染單個候選項 +local function render_cand(seq, code, text, comment) + local cand = "" + -- 選擇渲染格式 + if seq == 1 then + cand = first_format + else + cand = next_format + end + -- 渲染提示串 + comment = render_comment(comment) + cand = string.gsub(cand, "seq", index_indicators[seq]) + cand = string.gsub(cand, "code", escape_percent(code)) + cand = string.gsub(cand, "候選", escape_percent(text)) + cand = string.gsub(cand, "comment", escape_percent(comment)) + return cand +end + +-- 過濾器 +function embeded_cands_filter.func(input, env) + if not env.embeded.embeded_cands and not yuhao_switch_vars.is_zhelp then + for cand in input:iter() do + yield(cand) + end + return + end + + -- 要顯示的候選數量 + local page_size = env.engine.schema.page_size + -- 暫存當前頁候選, 然后批次送出 + local page_cands, page_rendered = {}, {} + -- 暫存索引, 首選和預編輯文本 + local index, first_cand, preedit = 0, nil, "" + + local function refresh_preedit() + if first_cand then + first_cand.preedit = table.concat(page_rendered, separator) + -- 將暫存的一頁候選批次送出 + for _, c in ipairs(page_cands) do + yield(c) + end + end + -- 清空暫存 + first_cand, preedit = nil, "" + page_cands, page_rendered = {}, {} + end + + local hash = {} + local rank = 0 + -- 迭代器 + local iter, obj = input:iter() + -- 迭代由翻譯器輸入的候選列表 + local next = iter(obj) + while next do + -- 頁索引自增, 滿足 1 <= index <= page_size + index = index + 1 + + -- 當前遍歷候選項 + local cand = next + + -- 去除重複項 + if (not hash[cand.text]) then + hash[cand.text] = true + + if not first_cand then + -- 把首選捉出來 + first_cand = cand + end + + rank = rank + 1 + + -- 修改首選的預编輯文本, 這会作爲内嵌編碼顯示到輸入處 + preedit = render_cand(rank, first_cand.preedit, cand.text, cand.comment) + + -- 存入候選 + table.insert(page_cands, cand) + table.insert(page_rendered, preedit) + end + -- 遍歷完一頁候選後, 刷新預編輯文本 + if index == page_size then + refresh_preedit() + rank = 0 + end + + -- 當前候選處理完畢, 查詢下一個 + next = iter(obj) + + -- 如果當前暫存候選不足page_size但没有更多候選, 則需要刷新預編輯並送出 + if not next and index < page_size then + refresh_preedit() + end + + -- 下一頁, index歸零 + index = index % page_size + end +end + +function embeded_cands_filter.fini(env) +end + +return embeded_cands_filter diff --git a/beta/hotfix/lua/yuhao/yuhao_helper.lua b/beta/hotfix/lua/yuhao/yuhao_helper.lua new file mode 100644 index 0000000..7f98151 --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_helper.lua @@ -0,0 +1,28 @@ +-- yuhao_helper.lua + +-- 快捷鍵提示 + +local function translator(input, seg) + local table + if input == 'help' or input == "bang" then + table = { + { '只出常用字', 'Ctrl + Shift + O' }, + { '常用字优先', 'Ctrl + Shift + I' }, + { '拆分三重注解', 'Ctrl + Shift + C' }, + { '四码屏蔽词语', 'Ctrl + Shift + D' }, + { '全码后置', 'Ctrl + Shift + H' }, + { '繁体简化', 'Ctrl + Shift + J' }, + { '简体转繁', 'Ctrl + Shift + F' }, + { '宇浩输入法官网', 'https://zhuyuhao.com/yuhao/' }, + { '方案下载', 'https://github.com/forFudan/yuhao' }, + { '上屏注释', 'Ctrl + Shift + Return' }, + } + else return end + for k, v in ipairs(table) do + local cand = Candidate('help', seg.start, seg._end, v[2], ' ' .. v[1]) + cand.preedit = input .. ' 〔宇浩帮助〕' + yield(cand) + end +end + +return translator diff --git a/beta/hotfix/lua/yuhao/yuhao_sc_first.lua b/beta/hotfix/lua/yuhao/yuhao_sc_first.lua new file mode 100644 index 0000000..864a51c --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_sc_first.lua @@ -0,0 +1,64 @@ +-- Name: yuhao_sc_first.lua +-- 名称: 大陸簡化字前置 +-- Version: 20230918 +-- Author: forFudan 朱宇浩 +-- Github: https://github.com/forFudan/ +-- 版權聲明: +-- 專爲宇浩輸入法製作 +-- 轉載請保留作者名和出處 +-- Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International +--------------------------------------- +-- +-- 介紹: +-- 將候選中的簡化字前置 +-- 《通用規範漢字表》中的8105字 +-- +-- Description: +-- Prioritize simplified Chinese characters +-- +-- 版本: +-- 20230918: 初版 + +--------------------------- + +local str = +"一乙二十丁厂七卜八人入儿匕几九刁了刀力乃又三干于亏工土士才下寸大丈与万上小口山巾千乞川亿个夕久么勺凡丸及广亡门丫义之尸己已巳弓子卫也女刃飞习叉马乡丰王开井天夫元无云专丐扎艺木五支厅不犬太区历歹友尤匹车巨牙屯戈比互切瓦止少曰日中贝冈内水见午牛手气毛壬升夭长仁什片仆化仇币仍仅斤爪反介父从仑今凶分乏公仓月氏勿欠风丹匀乌勾凤六文亢方火为斗忆计订户认冗讥心尺引丑巴孔队办以允予邓劝双书幻玉刊未末示击打巧正扑卉扒功扔去甘世艾古节本术可丙左厉石右布夯戊龙平灭轧东卡北占凸卢业旧帅归旦目且叶甲申叮电号田由只叭史央兄叽叼叫叩叨另叹冉皿凹囚四生矢失乍禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印尔乐句匆册卯犯外处冬鸟务包饥主市立冯玄闪兰半汁汇头汉宁穴它讨写让礼训议必讯记永司尼民弗弘出辽奶奴召加皮边孕发圣对台矛纠母幼丝邦式迂刑戎动扛寺吉扣考托老巩圾执扩扫地场扬耳芋共芒亚芝朽朴机权过臣吏再协西压厌戌在百有存而页匠夸夺灰达列死成夹夷轨邪尧划迈毕至此贞师尘尖劣光当早吁吐吓虫曲团吕同吊吃因吸吗吆屿屹岁帆回岂则刚网肉年朱先丢廷舌竹迁乔迄伟传乒乓休伍伏优臼伐延仲件任伤价伦份华仰仿伙伪自伊血向似后行舟全会杀合兆企众爷伞创肌肋朵杂危旬旨旭负匈名各多争色壮冲妆冰庄庆亦刘齐交衣次产决亥充妄闭问闯羊并关米灯州汗污江汛池汝汤忙兴宇守宅字安讲讳军讶许讹论讼农讽设访诀寻那迅尽导异弛孙阵阳收阶阴防奸如妇妃好她妈戏羽观欢买红驮纤驯约级纪驰纫巡寿弄麦玖玛形进戒吞远违韧运扶抚坛技坏抠扰扼拒找批址扯走抄贡汞坝攻赤折抓扳抡扮抢孝坎均抑抛投坟坑抗坊抖护壳志块扭声把报拟却抒劫芙芜苇芽花芹芥芬苍芳严芦芯劳克芭苏杆杠杜材村杖杏杉巫极李杨求甫匣更束吾豆两酉丽医辰励否还尬歼来连轩步卤坚肖旱盯呈时吴助县里呆吱吠呕园旷围呀吨足邮男困吵串员呐听吟吩呛吻吹呜吭吧邑吼囤别吮岖岗帐财针钉牡告我乱利秃秀私每兵估体何佐佑但伸佃作伯伶佣低你住位伴身皂伺佛囱近彻役返余希坐谷妥含邻岔肝肛肚肘肠龟甸免狂犹狈角删条彤卵灸岛刨迎饭饮系言冻状亩况床库庇疗吝应这冷庐序辛弃冶忘闰闲间闷判兑灶灿灼弟汪沐沛汰沥沙汽沃沦汹泛沧没沟沪沈沉沁怀忧忱快完宋宏牢究穷灾良证启评补初社祀识诈诉罕诊词译君灵即层屁尿尾迟局改张忌际陆阿陈阻附坠妓妙妖姊妨妒努忍劲矣鸡纬驱纯纱纲纳驳纵纷纸纹纺驴纽奉玩环武青责现玫表规抹卦坷坯拓拢拔坪拣坦担坤押抽拐拖者拍顶拆拎拥抵拘势抱拄垃拉拦幸拌拧拂拙招坡披拨择抬拇拗其取茉苦昔苛若茂苹苗英苟苑苞范直茁茄茎苔茅枉林枝杯枢柜枚析板松枪枫构杭杰述枕丧或画卧事刺枣雨卖郁矾矿码厕奈奔奇奋态欧殴垄妻轰顷转斩轮软到非叔歧肯齿些卓虎虏肾贤尚旺具味果昆国哎咕昌呵畅明易咙昂迪典固忠呻咒咋咐呼鸣咏呢咄咖岸岩帖罗帜帕岭凯败账贩贬购贮图钓制知迭氛垂牧物乖刮秆和季委秉佳侍岳供使例侠侥版侄侦侣侧凭侨佩货侈依卑的迫质欣征往爬彼径所舍金刹命肴斧爸采觅受乳贪念贫忿肤肺肢肿胀朋股肮肪肥服胁周昏鱼兔狐忽狗狞备饰饱饲变京享庞店夜庙府底疟疙疚剂卒郊庚废净盲放刻育氓闸闹郑券卷单炬炒炊炕炎炉沫浅法泄沽河沾泪沮油泊沿泡注泣泞泻泌泳泥沸沼波泼泽治怔怯怖性怕怜怪怡学宝宗定宠宜审宙官空帘宛实试郎诗肩房诚衬衫视祈话诞诡询该详建肃录隶帚屉居届刷屈弧弥弦承孟陋陌孤陕降函限妹姑姐姓妮始姆迢驾叁参艰线练组绅细驶织驹终驻绊驼绍绎经贯契贰奏春帮玷珍玲珊玻毒型拭挂封持拷拱项垮挎城挟挠政赴赵挡拽哉挺括垢拴拾挑垛指垫挣挤拼挖按挥挪拯某甚荆茸革茬荐巷带草茧茵茶荒茫荡荣荤荧故胡荫荔南药标栈柑枯柄栋相查柏栅柳柱柿栏柠树勃要柬咸威歪研砖厘厚砌砂泵砚砍面耐耍牵鸥残殃轴轻鸦皆韭背战点虐临览竖省削尝昧盹是盼眨哇哄哑显冒映星昨咧昭畏趴胃贵界虹虾蚁思蚂虽品咽骂勋哗咱响哈哆咬咳咪哪哟炭峡罚贱贴贻骨幽钙钝钞钟钢钠钥钦钧钩钮卸缸拜看矩毡氢怎牲选适秒香种秋科重复竿段便俩贷顺修俏保促俄俐侮俭俗俘信皇泉鬼侵禹侯追俊盾待徊衍律很须叙剑逃食盆胚胧胆胜胞胖脉胎勉狭狮独狰狡狱狠贸怨急饵饶蚀饺饼峦弯将奖哀亭亮度迹庭疮疯疫疤咨姿亲音帝施闺闻闽阀阁差养美姜叛送类迷籽娄前首逆兹总炼炸烁炮炫烂剃洼洁洪洒柒浇浊洞测洗活派洽染洛浏济洋洲浑浓津恃恒恢恍恬恤恰恼恨举觉宣宦室宫宪突穿窃客诫冠诬语扁袄祖神祝祠误诱诲说诵垦退既屋昼屏屎费陡逊眉孩陨除险院娃姥姨姻娇姚娜怒架贺盈勇怠癸蚤柔垒绑绒结绕骄绘给绚骆络绝绞骇统耕耘耗耙艳泰秦珠班素匿蚕顽盏匪捞栽捕埂捂振载赶起盐捎捍捏埋捉捆捐损袁捌都哲逝捡挫换挽挚热恐捣壶捅埃挨耻耿耽聂恭莽莱莲莫莉荷获晋恶莹莺真框梆桂桔栖档桐株桥桦栓桃格桩校核样根索哥速逗栗贾酌配翅辱唇夏砸砰砾础破原套逐烈殊殉顾轿较顿毙致柴桌虑监紧党逞晒眠晓哮唠鸭晃哺晌剔晕蚌畔蚣蚊蚪蚓哨哩圃哭哦恩鸯唤唁哼唧啊唉唆罢峭峨峰圆峻贼贿赂赃钱钳钻钾铁铃铅缺氧氨特牺造乘敌秤租积秧秩称秘透笔笑笋债借值倚俺倾倒倘俱倡候赁俯倍倦健臭射躬息倔徒徐殷舰舱般航途拿耸爹舀爱豺豹颁颂翁胰脆脂胸胳脏脐胶脑脓逛狸狼卿逢鸵留鸳皱饿馁凌凄恋桨浆衰衷高郭席准座症病疾斋疹疼疲脊效离紊唐瓷资凉站剖竞部旁旅畜阅羞羔瓶拳粉料益兼烤烘烦烧烛烟烙递涛浙涝浦酒涉消涡浩海涂浴浮涣涤流润涧涕浪浸涨烫涩涌悖悟悄悍悔悯悦害宽家宵宴宾窍窄容宰案请朗诸诺读扇诽袜袖袍被祥课冥谁调冤谅谆谈谊剥恳展剧屑弱陵祟陶陷陪娱娟恕娥娘通能难预桑绢绣验继骏球琐理琉琅捧堵措描域捺掩捷排焉掉捶赦堆推埠掀授捻教掏掐掠掂培接掷控探据掘掺职基聆勘聊娶著菱勒黄菲萌萝菌萎菜萄菊菩萍菠萤营乾萧萨菇械彬梦婪梗梧梢梅检梳梯桶梭救曹副票酝酗厢戚硅硕奢盔爽聋袭盛匾雪辅辆颅虚彪雀堂常眶匙晨睁眯眼悬野啪啦曼晦晚啄啡距趾啃跃略蚯蛀蛇唬累鄂唱患啰唾唯啤啥啸崖崎崭逻崔帷崩崇崛婴圈铐铛铝铜铭铲银矫甜秸梨犁秽移笨笼笛笙符第敏做袋悠偿偶偎偷您售停偏躯兜假衅徘徙得衔盘舶船舵斜盒鸽敛悉欲彩领脚脖脯豚脸脱象够逸猜猪猎猫凰猖猛祭馅馆凑减毫烹庶麻庵痊痒痕廊康庸鹿盗章竟商族旋望率阎阐着羚盖眷粘粗粒断剪兽焊焕清添鸿淋涯淹渠渐淑淌混淮淆渊淫渔淘淳液淤淡淀深涮涵婆梁渗情惜惭悼惧惕惟惊惦悴惋惨惯寇寅寄寂宿窒窑密谋谍谎谐袱祷祸谓谚谜逮敢尉屠弹隋堕随蛋隅隆隐婚婶婉颇颈绩绪续骑绰绳维绵绷绸综绽绿缀巢琴琳琢琼斑替揍款堪塔搭堰揩越趁趋超揽堤提博揭喜彭揣插揪搜煮援搀裁搁搓搂搅壹握搔揉斯期欺联葫散惹葬募葛董葡敬葱蒋蒂落韩朝辜葵棒棱棋椰植森焚椅椒棵棍椎棉棚棕棺榔椭惠惑逼粟棘酣酥厨厦硬硝确硫雁殖裂雄颊雳暂雅翘辈悲紫凿辉敞棠赏掌晴睐暑最晰量鼎喷喳晶喇遇喊遏晾景畴践跋跌跑跛遗蛙蛛蜓蜒蛤喝鹃喂喘喉喻啼喧嵌幅帽赋赌赎赐赔黑铸铺链销锁锄锅锈锋锌锐甥掰短智氮毯氯鹅剩稍程稀税筐等筑策筛筒筏答筋筝傲傅牌堡集焦傍储皓皖粤奥街惩御循艇舒逾番释禽腊脾腋腔腕鲁猩猬猾猴惫然馈馋装蛮就敦斌痘痢痪痛童竣阔善翔羡普粪尊奠道遂曾焰港滞湖湘渣渤渺湿温渴溃溅滑湃渝湾渡游滋渲溉愤慌惰愕愣惶愧愉慨割寒富寓窜窝窖窗窘遍雇裕裤裙禅禄谢谣谤谦犀属屡强粥疏隔隙隘媒絮嫂媚婿登缅缆缉缎缓缔缕骗编骚缘瑟鹉瑞瑰瑙魂肆摄摸填搏塌鼓摆携搬摇搞塘摊聘斟蒜勤靴靶鹊蓝墓幕蓬蓄蒲蓉蒙蒸献椿禁楚楷榄想槐榆楼概赖酪酬感碍碘碑碎碰碗碌尴雷零雾雹辐辑输督频龄鉴睛睹睦瞄睫睡睬嗜鄙嗦愚暖盟歇暗暇照畸跨跷跳跺跪路跤跟遣蜈蜗蛾蜂蜕嗅嗡嗓署置罪罩蜀幌错锚锡锣锤锥锦键锯锰矮辞稚稠颓愁筹签简筷毁舅鼠催傻像躲魁衙微愈遥腻腰腥腮腹腺鹏腾腿鲍猿颖触解煞雏馍馏酱禀痹廓痴痰廉靖新韵意誊粮数煎塑慈煤煌满漠滇源滤滥滔溪溜漓滚溢溯滨溶溺粱滩慎誉塞寞窥窟寝谨褂裸福谬群殿辟障媳嫉嫌嫁叠缚缝缠缤剿静碧璃赘熬墙墟嘉摧赫截誓境摘摔撇聚慕暮摹蔓蔑蔡蔗蔽蔼熙蔚兢模槛榴榜榨榕歌遭酵酷酿酸碟碱碳磁愿需辖辗雌裳颗瞅墅嗽踊蜻蜡蝇蜘蝉嘛嘀赚锹锻镀舞舔稳熏箕算箩管箫舆僚僧鼻魄魅貌膜膊膀鲜疑孵馒裹敲豪膏遮腐瘩瘟瘦辣彰竭端旗精粹歉弊熄熔煽潇漆漱漂漫滴漾演漏慢慷寨赛寡察蜜寥谭肇褐褪谱隧嫩翠熊凳骡缩慧撵撕撒撩趣趟撑撮撬播擒墩撞撤增撰聪鞋鞍蕉蕊蔬蕴横槽樱橡樟橄敷豌飘醋醇醉磕磊磅碾震霄霉瞒题暴瞎嘻嘶嘲嘹影踢踏踩踪蝶蝴蝠蝎蝌蝗蝙嘿嘱幢墨镇镐镑靠稽稻黎稿稼箱篓箭篇僵躺僻德艘膝膛鲤鲫熟摩褒瘪瘤瘫凛颜毅糊遵憋潜澎潮潭鲨澳潘澈澜澄懂憔懊憎额翩褥谴鹤憨慰劈履豫缭撼擂操擅燕蕾薯薛薇擎薪薄颠翰噩橱橙橘整融瓢醒霍霎辙冀餐嘴踱蹄蹂蟆螃器噪鹦赠默黔镜赞穆篮篡篷篱儒邀衡膨雕鲸磨瘾瘸凝辨辩糙糖糕燃濒澡激懒憾懈窿壁避缰缴戴擦藉鞠藏藐檬檐檀礁磷霜霞瞭瞧瞬瞳瞩瞪曙蹋蹈螺蟋蟀嚎赡穗魏簧簇繁徽爵朦臊鳄癌辫赢糟糠燥懦豁臀臂翼骤藕鞭藤覆瞻蹦嚣镰翻鳍鹰瀑襟璧戳孽警蘑藻攀曝蹲蹭蹬巅簸簿蟹颤靡癣瓣羹鳖爆疆鬓壤馨耀躁蠕嚼嚷巍籍鳞魔糯灌譬蠢霸露霹躏黯髓赣囊镶瓤罐矗乂乜兀弋孑孓幺亓韦廿丏卅仄厄仃仉仂兮刈爻卞闩讣尹夬爿毋邗邛艽艿札叵匝丕匜劢卟叱叻仨仕仟仡仫仞卮氐犰刍邝邙汀讦讧讪讫尻阡尕弁驭匡耒玎玑邢圩圬圭扦圪圳圹扪圮圯芊芍芄芨芑芎芗亘厍夼戍尥乩旯曳岌屺凼囡钇缶氘氖牝伎伛伢佤仵伥伧伉伫囟汆刖夙旮刎犷犸舛凫邬饧汕汔汐汲汜汊忖忏讴讵祁讷聿艮厾阱阮阪丞妁牟纡纣纥纨玕玙抟抔圻坂坍坞抃抉㧐芫邯芸芾苈苣芷芮苋芼苌苁芩芪芡芟苄苎苡杌杓杞杈忑孛邴邳矶奁豕忒欤轫迓邶忐卣邺旰呋呒呓呔呖呃旸吡町虬呗吽吣吲帏岐岈岘岑岚兕囵囫钊钋钌迕氙氚牤佞邱攸佚佝佟佗伽彷佘佥孚豸坌肟邸奂劬狄狁鸠邹饨饩饪饫饬亨庑庋疔疖肓闱闳闵羌炀沣沅沔沤沌沏沚汩汨沂汾沨汴汶沆沩泐怃怄忡忤忾怅忻忪怆忭忸诂诃诅诋诌诏诒孜陇陀陂陉妍妩妪妣妊妗妫妞姒妤邵劭刭甬邰纭纰纴纶纾玮玡玭玠玢玥玦盂忝匦坩抨拤坫拈垆抻劼拃拊坼坻㧟坨坭抿坳耶苷苯苤茏苫苜苴苒苘茌苻苓茚茆茑茓茔茕茀苕枥枇杪杳枧杵枨枞枋杻杷杼矸砀刳奄瓯殁郏轭郅鸢盱昊昙杲昃咂呸昕昀旻昉炅咔畀虮咀呷黾呱呤咚咆咛呶呣呦咝岢岿岬岫帙岣峁刿迥岷剀帔峄沓囹罔钍钎钏钒钕钗邾迮牦竺迤佶佬佰侑侉臾岱侗侃侏侩佻佾侪佼佯侬帛阜侔徂刽郄怂籴瓮戗肼䏝肽肱肫剁迩郇狙狎狍狒咎炙枭饯饴冽冼庖疠疝疡兖妾劾炜𬉼炖炘炝炔泔沭泷泸泱泅泗泠泺泖泫泮沱泯泓泾怙怵怦怛怏怍㤘怩怫怿宕穹宓诓诔诖诘戾诙戽郓衩祆祎祉祇诛诜诟诠诣诤诧诨诩戕孢亟陔妲妯姗帑弩孥驽虱迦迨绀绁绂驷驸绉绌驿骀甾珏珐珂珑玳珀顸珉珈拮垭挝垣挞垤赳贲垱垌郝垧垓挦垠茜荚荑贳荜莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茨垩荥荦荨荩剋荪茹荬荮柰栉柯柘栊柩枰栌柙枵柚枳柞柝栀柢栎枸柈柁枷柽剌酊郦甭砗砘砒斫砭砜奎耷虺殂殇殄殆轱轲轳轶轸虿毖觇尜哐眄眍𠳐郢眇眊眈禺哂咴曷昴昱昵咦哓哔畎毗呲胄畋畈虼虻盅咣哕剐郧咻囿咿哌哙哚咯咩咤哝哏哞峙峣罘帧峒峤峋峥贶钚钛钡钣钤钨钫钯氡氟牯郜秕秭竽笈笃俦俨俅俪叟垡牮俣俚皈俑俟逅徇徉舢俞郗俎郤爰郛瓴胨胪胛胂胙胍胗胝朐胫鸨匍狨狯飑狩狲訇逄昝饷饸饹胤孪娈弈奕庥疬疣疥疭庠竑彦飒闼闾闿阂羑迸籼酋炳炻炽炯烀炷烃洱洹洧洌浃洇洄洙涎洎洫浍洮洵浒浔浕洳恸恓恹恫恺恻恂恪恽宥扃衲衽衿袂祛祜祓祚诮祗祢诰诳鸩昶郡咫弭牁胥陛陟娅姮娆姝姣姘姹怼羿炱矜绔骁骅绗绛骈耖挈珥珙顼珰珩珧珣珞琤珲敖恚埔埕埘埙埚挹耆耄埒捋贽垸捃盍荸莆莳莴莪莠莓莜莅荼莩荽莸荻莘莎莞莨鸪莼栲栳郴桓桡桎桢桤梃栝桕桁桧桅栟桉栩逑逋彧鬲豇酐逦厝孬砝砹砺砧砷砟砼砥砣剞砻轼轾辂鸫趸龀鸬虔逍眬唛晟眩眙哧哽唔晁晏鸮趵趿畛蚨蚜蚍蚋蚬蚝蚧唢圄唣唏盎唑崂崃罡罟峪觊赅钰钲钴钵钹钺钽钼钿铀铂铄铆铈铉铊铋铌铍䥽铎氩氤氦毪舐秣秫盉笄笕笊笏笆俸倩俵偌俳俶倬倏恁倭倪俾倜隼隽倌倥臬皋郫倨衄颀徕舫釜奚衾胯胱胴胭脍胼朕脒胺鸱玺鸲狷猁狳猃狺逖桀袅饽凇栾挛亳疳疴疸疽痈疱痂痉衮凋颃恣旆旄旃阃阄訚阆恙粑朔郸烜烨烩烊剡郯烬涑浯涞涟娑涅涠浞涓浥涔浜浠浣浚悚悭悝悒悌悛宸窈剜诹冢诼袒袢祯诿谀谂谄谇屐屙陬勐奘牂蚩陲姬娠娌娉娲娩娴娣娓婀畚逡绠骊绡骋绥绦绨骎邕鸶彗耜焘舂琏琇麸揶埴埯捯掳掴埸埵赧埤捭逵埝堋堍掬鸷掖捽掊堉掸捩掮悫埭埽掇掼聃菁萁菘堇萘萋菽菖萜萸萑棻菔菟萏萃菏菹菪菅菀萦菰菡梵梿梏觋桴桷梓棁桫棂啬郾匮敕豉鄄酞酚戛硎硭硒硖硗硐硇硌鸸瓠匏厩龚殒殓殍赉雩辄堑眭眦啧晡晤眺眵眸圊喏喵啉勖晞唵晗冕啭畦趺啮跄蚶蛄蛎蛆蚰蛊圉蚱蛉蛏蚴啁啕唿啐唼唷啖啵啶啷唳唰啜帻崚崦帼崮崤崆赇赈赊铑铒铗铙铟铠铡铢铣铤铧铨铩铪铫铬铮铯铰铱铳铵铷氪牾鸹秾逶笺筇笸笪笮笠笥笤笳笾笞偾偃偕偈傀偬偻皑皎鸻徜舸舻舴舷龛翎脬脘脲匐猗猡猞猝斛猕馗馃馄鸾孰庹庾痔痍疵翊旌旎袤阇阈阉阊阋阍阏羟粝粕敝焐烯焓烽焖烷焗渍渚淇淅淞渎涿淖挲淠涸渑淦淝淬涪淙涫渌淄惬悻悱惝惘悸惆惚惇惮窕谌谏扈皲谑裆袷裉谒谔谕谖谗谙谛谝逯郿隈粜隍隗婧婊婕娼婢婵胬袈翌恿欸绫骐绮绯绱骒绲骓绶绺绻绾骖缁耠琫琵琶琪瑛琦琥琨靓琰琮琯琬琛琚辇鼋揳堞搽揸揠堙趄揖颉塄揿耋揄蛩蛰塆摒揆掾聒葑葚靰靸葳葺葸萼葆葩葶蒌萱戟葭楮棼椟棹椤棰赍椋椁椪棣椐鹁覃酤酢酡鹂厥殚殛雯雱辊辋椠辍辎斐睄睑睇睃戢喋嗒喃喱喹晷喈跖跗跞跚跎跏跆蛱蛲蛭蛳蛐蛔蛞蛴蛟蛘喁喟啾嗖喑嗟喽嗞喀喔喙嵘嵖崴遄詈嵎崽嵬嵛嵯嵝嵫幄嵋赕铻铼铿锃锂锆锇锉锏锑锒锔锕掣矬氰毳毽犊犄犋鹄犍嵇黍稃稂筚筵筌傣傈舄牍傥傧遑傩遁徨媭畲弑颌翕釉鹆舜貂腈腌腓腆腴腑腚腱鱿鲀鲂颍猢猹猥飓觞觚猱颎飧馇馊亵脔裒痣痨痦痞痤痫痧赓竦瓿啻颏鹇阑阒阕粞遒孳焯焜焙焱鹈湛渫湮湎湜渭湍湫溲湟溆湲湔湉渥湄滁愠惺愦惴愀愎愔喾寐谟扉裢裎裥祾祺谠幂谡谥谧遐孱弼巽骘媪媛婷巯翚皴婺骛缂缃缄彘缇缈缌缑缒缗飨耢瑚瑁瑜瑗瑄瑕遨骜韫髡塬鄢趔趑摅摁蜇搋搪搐搛搠摈彀毂搦搡蓁戡蓍鄞靳蓐蓦鹋蒽蓓蓖蓊蒯蓟蓑蒿蒺蓠蒟蒡蒹蒴蒗蓥颐楔楠楂楝楫楸椴槌楯皙榈槎榉楦楣楹椽裘剽甄酮酰酯酩蜃碛碓硼碉碚碇碜鹌辏龃龅訾粲虞睚嗪韪嗷嗉睨睢雎睥嘟嗑嗫嗬嗔嗝戥嗄煦暄遢暌跬跶跸跐跣跹跻蛸蜊蜍蜉蜣畹蛹嗣嗯嗥嗲嗳嗌嗍嗨嗐嗤嗵罨嵊嵩嵴骰锗锛锜锝锞锟锢锨锩锭锱雉氲犏歃稞稗稔筠筢筮筲筱牒煲敫徭愆艄觎毹貊貅貉颔腠腩腼腭腧塍媵詹鲅鲆鲇鲈稣鲋鲐肄鹐飕觥遛馐鹑亶瘃痱痼痿瘐瘁瘆麂裔歆旒雍阖阗阙羧豢粳猷煳煜煨煅煊煸煺滟溱溘漭滢溥溧溽裟溻溷滗滫溴滏滃滦溏滂滓溟滪愫慑慊鲎骞窦窠窣裱褚裨裾裰禊谩谪媾嫫媲嫒嫔媸缙缜缛辔骝缟缡缢缣骟耥璈瑶瑭獒觏慝嫠韬叆髦摽墁撂摞撄翥踅摭墉墒榖綦蔫蔷靺靼鞅靿甍蔸蔟蔺戬蕖蔻蓿斡鹕蓼榛榧榻榫榭槔榱槁槟槠榷僰酽酶酹厮碡碴碣碲磋臧豨殡霆霁辕蜚裴翡龇龈睿䁖睽嘞嘈嘌嘁嘎暧暝踌踉蜞蜥蜮蝈蜴蜱蜩蜷蜿螂蜢嘘嘡鹗嘣嘤嘚嗾嘧罴罱幔嶂幛赙罂骷骶鹘锲锴锶锷锸锵镁镂犒箐箦箧箍箸箬箅箪箔箜箢箓毓僖儆僳僭劁僮魃魆睾艋鄱膈膑鲑鲔鲚鲛鲟獐觫雒夤馑銮塾麽瘌瘊瘘瘙廖韶旖膂阚鄯鲞粿粼粽糁槊鹚熘熥潢漕滹漯漶潋潴漪漉漳漩澉潍慵搴窨寤綮谮褡褙褓褛褊谯谰谲暨屣鹛嫣嫱嫖嫦嫚嫘嫡鼐翟瞀鹜骠缥缦缧缨骢缪缫耦耧瑾璜璀璎璁璋璇奭髯髫撷撅赭撸鋆撙撺墀聩觐鞑蕙鞒蕈蕨蕤蕞蕺瞢蕃蕲赜槿樯槭樗樘樊槲醌醅靥魇餍磔磙霈辘龉龊觑瞌瞋瞑嘭噎噶颙暹噘踔踝踟踒踬踮踯踺踞蝽蝾蝻蝰蝮螋蝓蝣蝼噗嘬颚噍噢噙噜噌噔颛幞幡嶙嶝骺骼骸镊镉镌镍镏镒镓镔稷箴篑篁篌篆牖儋徵磐虢鹞膘滕鲠鲡鲢鲣鲥鲧鲩獗獠觯馓馔麾廛瘛瘼瘢瘠齑羯羰𥻗遴糌糍糅熜熵熠澍澌潸潦潲鋈潟潼潺憬憧寮窳谳褴褟褫谵熨屦嬉勰戮蝥缬缮缯骣畿耩耨耪璞璟靛璠璘聱螯髻髭髹擀熹甏擞縠磬颞蕻鞘颟薤薨檠薏薮薜薅樾橛橇樵檎橹樽樨橼墼橐翮醛醐醍醚磲赝飙殪霖霏霓錾辚臻遽氅瞟瞠瞰嚄嚆噤暾蹀踹踵踽蹉蹁螨蟒螈螅螭螠螟噱噬噫噻噼罹圜䦃镖镗镘镚镛镝镞镠氇氆憩穑篝篥篦篪篙盥劓翱魉魈徼歙膳膦膙鲮鲱鲲鲳鲴鲵鲷鲻獴獭獬邂鹧廨赟瘰廪瘿瘵瘴癃瘳斓麇麈嬴壅羲糗瞥甑燎燠燔燧濑濉潞澧澹澥澶濂褰寰窸褶禧嬖犟隰嬗颡缱缲缳璨璩璐璪螫擤壕觳罄擢薹鞡鞬薷薰藓藁檄檩懋醢翳礅磴鹩龋龌豳壑黻嚏嚅蹑蹒蹊蟥螬螵疃螳蟑嚓羁罽罾嶷黜黝髁髀镡镢镣镦镧镩镪镫罅黏簌篾篼簖簋鼢黛儡鹪鼾皤魍龠繇貘邈貔臌膻臆臃鲼鲽鳀鳃鳅鳇鳊螽燮鹫襄糜縻膺癍麋懑濡濮濞濠濯蹇謇邃襁檗擘孺隳嬷蟊鹬鍪鏊鳌鬈鬃瞽鞯鞨鞫鞧鞣藜藠藩醪蹙礓燹餮瞿曛颢曜躇蹚鹭蟛蟪蟠蟮鹮黠黟髅髂镬镭镯馥簟簪鼬雠艟鳎鳏鳐癞癔癜癖糨蹩鎏懵彝邋鬏攉攒鞲鞴藿蘧蘅麓醮醯酃霪霭霨黼嚯蹰蹶蹽蹼蹴蹾蹿蠖蠓蟾蠊黢髋髌镲籀籁齁魑艨鳓鳔鳕鳗鳙麒鏖羸㸆瀚瀣瀛襦谶襞骥缵瓒攘蘩蘖醴霰酆矍曦躅鼍巉黩黥黪镳镴黧纂璺鼯臜鳜鳝鳟獾孀骧瓘鼙醺礴颦曩鳢癫麝夔爝灏禳鐾羼蠡耱懿蘸鹳霾氍饕躐髑镵穰饔鬻鬟趱攫攥颧躜鼹癯麟蠲蠹躞衢鑫灞襻纛鬣攮囔馕戆爨齉亍尢彳卬殳𠙶毌邘戋圢氕伋仝冮氿汈氾忉宄𬣙讱扞圲圫芏芃朳朸𨙸邨吒吖屼屾辿钆仳伣伈癿甪邠犴冱邡闫𬇕汋䜣讻𬣞孖𬘓纩玒玓玘玚刬𫭟坜坉扽𫭢坋扺㧑毐芰芣苊苉芘芴芠𫇭芤杕杙杄杧杩尪尨轪𫐄坒芈旴旵呙㕮岍𫵷岠岜呇冏觃岙伾㑇伭佖伲佁飏狃闶汧汫𣲘𣲗沄沘𬇙汭㳇沇忮忳忺𬣡祃诇邲诎诐屃𫸩岊阽䢺阼妧妘𨚕纮驲𫘜纻𬘘𫘝纼玤玞玱玟邽邿坥坰坬坽弆耵䢼𦭜茋苧苾苠枅㭎枘枍矼矻匼𬨂𬀩𬀪旿昇昄昒昈咉咇咍岵岽岨岞峂㟃囷𬬩钐钔钖牥佴垈侁侹佸佺隹㑊侂佽侘郈舠郐郃攽肭肸肷狉狝饳忞於炌炆泙沺泂泜泃泇怊峃穸祋祊𫍣𬣳𬩽鸤弢弨陑𬮿陎𬯀卺乸妭姈𫰛迳叕𬳵驵𬳶䌹驺𫠊绋绐砉耔㛃玶珇珅𬍛珋玹珌玿韨垚垯垙垲埏垍耇鿍垎垴垟垞挓垵垏拶荖荁荙荛茈茽荄茺𬜬荓茳𦰡茛荭㭕柷柃柊枹栐柖郚剅䴓迺厖砆砑砄耏奓䶮轵轷轹轺昺𪾢昽盷咡咺昳昣哒昤昫昡咥昪虷虸哃峘耑峛𪨰峗峧帡钘𫓧钜𬬮𬬱𬬭钪钬钭矧秬俫舁俜俙俍垕衎舣弇侴鸧䏡胠𦙶胈胩胣朏飐訄饻庤疢炣炟㶲洭洘洓洿㳚泚浈浉洸洑洢洈洚洺洨浐㳘洴洣恔宬窀扂袆祏祐祕叚陧陞娀姞姱姤姶姽枲绖骃𬘡𬳽𬘩𫄧彖骉恝珪珛珹琊玼珖𪟝珽珦珫珒𬍤珢珕珝𫭼埗垾垺埆垿埌埇莰茝𬜯鄀莶莝䓖莙栻桠𬂩桄梠栴梴栒酎酏𫠆砵砠砫砬硁恧翃郪𨐈辀辁𬌗剕赀哢晅晊唝哳哱冔晔晐晖畖蚄蚆𫑡帱崁峿𪨶崄帨崀赆𬬸钷𬬻𬬹𬬿𬭁眚甡笫倻倴脩倮倕倞𫢸倓倧衃虒舭舯舥瓞鬯鸰脎朓胲虓鱽狴峱狻眢𫗧勍痄疰痃竘羖羓桊敉烠烔烶烻𬊈涍浡浭浬涄涢涐浰浟浛浼浲涘悈悃悢𬒈宧窅窊窎扅扆袪袗袯祧隺堲疍𨺙陴烝砮㛚哿翀翂剟𬳿𫄨绤骍𬘫䂮琎珸珵琄琈琀珺掭堎堐埼掎埫堌晢𫮃掞埪壸㙍聍菝萚菥莿䓫勚䓬萆菂菍菼萣䓨菉䓛梼梽桲梾桯梣梌桹敔厣硔鿎硙硚硊硍勔䴕龁逴唪啫翈㫰晙畤𬱖趼跂蛃蚲𬟽蚺啴䎃崧崟崞崒崌崡铏𫓯𫟹铕𫟼铖铘铚铞铥铴牻牿稆笱笯偰偡鸺偭偲偁㿠鄅偓徛衒舳舲鸼悆鄃瓻䝙脶脞脟䏲鱾猇猊猄觖𠅤庱庼庳痓䴔竫堃阌羝羕焆烺焌淏𬇹淟淜淴淯湴涴𬍡㥄惛惔悰惙寁逭𬤇𫍯袼裈祲𬤊𫍲谞艴弸弶𬯎隃婞娵婼媖婳婍婌婫婤婘婠𬘬𬘭𬴂𫘦绹𫟅𬘯骕𫘧絜珷琲琡琟琔琭堾堼揕㙘堧喆堨塅堠絷𪣻𡎚葜惎萳葙靬葴蒇蒈鄚蒉蓇萩蒐葰葎鄑蒎葖蒄萹棤棽棫椓椑𬃊鹀椆棓棬棪椀楗𬷕甦酦觌奡皕硪欹詟𫐐辌棐龂𬹼黹牚睎晫晪晱𧿹蛑畯斝喤崶嵁𫶇崾嵅崿嵚翙𫖮圌圐赑淼赒鿏铹𬭊铽𨱇𫓶锊锍锎𬭎锓犇颋稌筀筘筜筥筅傃傉翛傒傕舾畬𫖯脿腘䐃腙腒𬱟鲃猰𫛭猯㺄馉凓鄗𫷷廋廆鄌粢遆旐𬮱焞𬊤欻𣸣溚溁湝渰湓㴔渟溠渼溇湣湑溞愐愃敩甯棨扊裣祼婻媆媞㛹媓媂媄毵矞𬴃𫘨缊缐骙瑃瑓瑅瑆䴖瑖瑝瑔瑀𤧛瑳瑂嶅瑑遘髢塥堽赪摛塝搒搌蒱蒨蓏蔀蓢蓂蒻蓣椹楪榃榅楒楞楩榇椸楙歅𬪩碃碏𬒔碈䃅硿鄠辒𬨎𫐓龆觜䣘暕鹍𫫇㬊暅跱蜐蜎嵲赗骱锖𫓹锘锳锧锪𬭚锫锬𬭛稑稙䅟𬕂筻筼筶筦筤傺鹎僇艅艉谼貆腽腨腯鲉鲊鲌䲟𬶋𬶍鲏雊猺飔觟𦝼馌裛廒瘀瘅鄘鹒鄜麀鄣阘𫔶煁煃煴煋煟煓滠溍溹滆滉溦溵漷滧滘滍愭慥慆塱𫌀裼禋禔禘禒谫鹔𫖳愍嫄媱戤勠戣𫘪𫘬缞耤瑧𫞩瑨瑱瑷瑢斠摏墕墈墐墘摴銎𡐓墚撖𪤗靽鞁蔌蔈蓰蔹蔊嘏榰榑槚𣗋槜榍疐𬸘酺酾酲酴碶䃎𬒗碨𥔲碹碥劂𫚖䴗夥瞍鹖㬎跽蜾幖嶍圙𨱏锺锼锽𬭤锾锿镃镄镅馝鹙箨箖劄僬僦僔僎槃㙦鲒鲕𫚕鲖鲗鲘鲙𬶐𬶏𩽾夐獍飗𬸚凘廑廙瘗瘥瘕鲝鄫熇漹漖潆漤潩漼漴㽏漈漋漻慬窬窭㮾𬤝褕禛禚隩嫕嫭嫜嫪𬙂㻬麹璆漦叇墣墦墡劐薁蕰蔃鼒槱鹝磏磉殣慭霅暵暲暶踦踣䗖蝘蝲蝤噇噂噀罶嶲嶓㠇嶟嶒镆镈镋镎𬭩镕稹儇皞皛䴘艎艏鹟𩾃鲦鲪鲬橥觭鹠鹡糇糈翦鹢鹣熛潖潵㵐澂澛瑬潽潾潏憭憕𬸣戭褯禤𫍽嫽遹𬴊璥璲璒憙擐鄹薳鞔黇𬞟蕗薢蕹橞橑橦醑觱磡𥕢磜豮𫟦𬺈𫠜鹾虤暿曌曈㬚蹅踶䗛螗疁㠓幪𪩘嶦𬭬𨱑𬭯馞穄篚篯簉鼽衠盦螣縢鲭鲯鲰鲺鲹𫗴亸癀瘭𬸦羱糒燋熻燊燚燏濩濋澪澽澴澭澼憷憺懔黉嬛鹨翯𫄷璱𤩽璬璮髽擿薿薸檑櫆檞醨繄磹磻瞫瞵蹐蟏㘎𬭳镤𬭶𫔍镥镨𬭸𨱔𬭼𫔎矰穙穜穟簕簃簏儦魋斶艚𬸪谿䲠𬶟鲾𬶠鲿鳁鳂鳈鳉獯䗪馘襕襚𬶨螱甓嬬嬥𦈡𫄸瓀釐鬶爇鞳鞮𬟁藟藦藨鹲檫黡礞礌𥖨蹢蹜蟫䗴嚚髃镮镱酂馧簠簝簰鼫鼩皦臑䲢鳑鳒鹱鹯癗𦒍旞翷冁䎖瀔瀍瀌襜䴙𬙊嚭㰀鬷醭蹯蠋翾鳘儳儴鼗𬶭𩾌鳚鳛麑麖蠃彟嬿鬒蘘欂醵颥甗𨟠巇酅髎犨𬶮𨭉㸌爔瀱瀹瀼瀵襫孅骦𬙋耰𤫉瓖鬘趯𬺓罍鼱鳠鳡鳣爟爚灈韂糵蘼礵鹴躔皭龢鳤亹籥鼷𫚭玃醾齇觿蠼" + +function setfromstr(str) + local t = {} + for p, c in utf8.codes(str) do + t[utf8.char(c)] = true + end + return t +end + +local charset = setfromstr(str) + +function issubset(candidate, charset) + for el, _ in pairs(candidate) do + if not charset[el] then + return false + end + end + return true +end + +local function yuhao_sc_first(input, env) + local b = env.engine.context:get_option("yuhao_sc_first") + local l = {} + local length_of_input = string.len(env.engine.context.input) + for cand in input:iter() do + local candidate = setfromstr(cand.text) + if (not b or issubset(candidate, charset) or (length_of_input < 4)) then + yield(cand) + else + table.insert(l, cand) + end + end + -- 非常用字词后置 + for i, cand in ipairs(l) do + yield(cand) + end +end + +return yuhao_sc_first \ No newline at end of file diff --git a/beta/hotfix/lua/yuhao/yuhao_single_char_only_for_full_code.lua b/beta/hotfix/lua/yuhao/yuhao_single_char_only_for_full_code.lua new file mode 100644 index 0000000..39ffea0 --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_single_char_only_for_full_code.lua @@ -0,0 +1,54 @@ +-- Name: yuhao_single_char_only_for_full_code.lua +-- 名稱: 全碼單字過濾 +-- Version: 20221108 +-- Author: forFudan 朱宇浩 +-- Github: https://github.com/forFudan/ +-- Purpose: 當用户輸入四碼時,只出單字,不出詞語.適合單字簡詞黨. +-- 版權聲明: +-- 專爲宇浩輸入法製作 +-- 轉載請保留作者名和出處 +-- Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International +--------------------------------------- +-- +-- 介紹: +-- 對於單字黨而言,有時候也希望能够通過輸入簡碼詞語提高打字速度. +-- 本腳本會對碼長進行一次判斷. +-- 當用户輸入不到四碼時,同時出單字和詞語. +-- 當用户輸入四碼時,只出單字,不出詞語. +-- +-- Description: +-- Only show single characters when users typing full code (4 letters.) +-- Show both single characters and words when users typing 1 to 3 letters. +-- +-- 使用方法: +-- (1) 需要將此 lua 文件放在 lua 文件夾下. +-- (2) 需要在 rime.lua 中添加以下代码激活本腳本: +-- yuhao_single_char_only_for_full_code = require("yuhao_single_char_only_for_full_code") +-- (3) 需要在 switches 添加狀態: +-- - name: yuhao_single_char_only_for_full_code +-- reset: 1 +-- states: [字词同出, 全码出单] +-- (4) 需要在 engine/filters 添加: +-- - lua_filter@yuhao_single_char_only_for_full_code +--------------------------- + +local function filter(input, env) + + local option = env.engine.context:get_option("yuhao_single_char_only_for_full_code") + local length_of_input = string.len(env.engine.context.input) + for cand in input:iter() do + local cand_genuine = cand:get_genuine() + if cand_genuine.type == 'completion' then + if not (option and (utf8.len(cand.text) > 1)) then + yield(cand) + end + else + -- If option is 1, code length is 4, char len is not 1, do not yield candicate. + if not (option and (utf8.len(cand.text) > 1) and (length_of_input == 4)) then + yield(cand) + end + end + end +end + +return filter diff --git a/beta/hotfix/lua/yuhao/yuhao_switch.lua b/beta/hotfix/lua/yuhao/yuhao_switch.lua new file mode 100644 index 0000000..fdbac01 --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_switch.lua @@ -0,0 +1,533 @@ +-- 作者:王牌餅乾 +-- https://github.com/lost-melody/ +-- 转载请保留作者名 +-- Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International +--------------------------------------- + +local yuhao_switch_proc = {} -- 開關管理-processor +local yuhao_switch_tr = {} -- 開關管理-translator + +-- ######## DEFINITION ######## + +local kRejected = 0 -- 拒: 不作響應, 由操作系統做默認處理 +local kAccepted = 1 -- 收: 由rime響應該按鍵 +local kNoop = 2 -- 無: 請下一個processor繼續看 + +-- 宏類型枚舉 +local macro_types = { + tip = "tip", + switch = "switch", + radio = "radio", + shell = "shell", + eval = "eval", +} + +-- 候選序號標記 +local index_indicators = {"¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹", "⁰"} + +-- ######## TOOLS ######## + +-- 返回被選中的候選的索引, 來自 librime-lua/sample 示例 +local function select_index(key, env) + local ch = key.keycode + local index = -1 + local select_keys = env.engine.schema.select_keys + if select_keys ~= nil and select_keys ~= "" and not key.ctrl() and ch >= 0x20 and ch < 0x7f then + local pos = string.find(select_keys, string.char(ch)) + if pos ~= nil then index = pos end + elseif ch >= 0x30 and ch <= 0x39 then + index = (ch - 0x30 + 9) % 10 + elseif ch >= 0xffb0 and ch < 0xffb9 then + index = (ch - 0xffb0 + 9) % 10 + elseif ch == 0x20 then + index = 0 + end + return index +end + +-- 設置開關狀態, 並更新保存的配置值 +local function set_option(env, ctx, option_name, value) + ctx:set_option(option_name, value) + if env.switcher then + -- 在支持的情況下, 更新保存的開關狀態 + local swt = env.switcher + if swt:is_auto_save(option_name) and swt.user_config ~= nil then + swt.user_config:set_bool("var/option/" .. option_name, value) + end + end +end + +local _unix_supported +-- 是否支持 Unix 命令 +local function unix_supported() + if _unix_supported == nil then + local res + _unix_supported, res = pcall(io.popen, "sleep 0") + if _unix_supported and res then + res:close() + end + end + return _unix_supported +end + +-- 下文的 new_tip, new_switch, new_radio 等是目前已實現的宏類型 +-- 其返回類型統一定義爲: +-- { +-- type = "string", +-- name = "string", +-- display = function(self, ctx) ... end -> string +-- trigger = function(self, ctx) ... end +-- } +-- 其中: +-- type 字段僅起到標識作用 +-- name 字段亦非必須 +-- display() 爲該宏在候選欄中顯示的效果, 通常 name 非空時直接返回 name 的值 +-- trigger() 爲該宏被選中時, 上屏的文本内容, 返回空卽不上屏 + +---提示語或快捷短語 +---顯示爲 name, 上屏爲 text +---@param name string +local function new_tip(name, text) + local tip = { + type = macro_types.tip, + name = name, + text = text, + } + function tip:display(ctx) + return #self.name ~= 0 and self.name or "" + end + + function tip:trigger(env, ctx) + if #text ~= 0 then + env.engine:commit_text(text) + end + ctx:clear() + end + + return tip +end + +---開關 +---顯示 name 開關當前的狀態, 並在選中切換狀態 +---states 分别指定開關狀態爲 開 和 關 時的顯示效果 +---@param name string +---@param states table +local function new_switch(name, states) + local switch = { + type = macro_types.switch, + name = name, + states = states, + } + function switch:display(ctx) + local state = "" + local current_value = ctx:get_option(self.name) + if current_value then + state = self.states[2] + else + state = self.states[1] + end + return state + end + + function switch:trigger(env, ctx) + local current_value = ctx:get_option(self.name) + if current_value ~= nil then + set_option(env, ctx, self.name, not current_value) + end + end + + return switch +end + +---單選 +---顯示一組 names 開關當前的狀態, 並在選中切換關閉當前開啓項, 並打開下一項 +---states 指定各組開關的 name 和當前開啓的開關時的顯示效果 +---@param states table +local function new_radio(states) + local radio = { + type = macro_types.radio, + states = states, + } + function radio:display(ctx) + local state = "" + for _, op in ipairs(self.states) do + local value = ctx:get_option(op.name) + if value then + state = op.display + break + end + end + return state + end + + function radio:trigger(env, ctx) + for i, op in ipairs(self.states) do + local value = ctx:get_option(op.name) + if value then + -- 關閉當前選項, 開啓下一選項 + set_option(env, ctx, op.name, not value) + set_option(env, ctx, self.states[i % #self.states + 1].name, value) + return + end + end + -- 全都没開, 那就開一下第一個吧 + set_option(env, ctx, self.states[1].name, true) + end + + return radio +end + +---Shell 命令, 僅支持 Linux/Mac 系統, 其他平臺可通過下文提供的 eval 宏自行擴展 +---name 非空時顯示其值, 爲空则顯示實時的 cmd 執行結果 +---cmd 爲待執行的命令内容 +---text 爲 true 時, 命令執行結果上屏, 否则僅執行 +---@param name string +---@param cmd string +---@param text boolean +local function new_shell(name, cmd, text) + if not unix_supported() then + return nil + end + + local template = "__macrowrapper() { %s ; }; __macrowrapper %s <<<''" + local function get_fd(args) + local cmdargs = {} + for _, arg in ipairs(args) do + table.insert(cmdargs, '"' .. arg .. '"') + end + return io.popen(string.format(template, cmd, table.concat(cmdargs, " ")), 'r') + end + + local shell = { + type = macro_types.tip, + name = name, + text = text, + } + + function shell:display(ctx, args) + return #self.name ~= 0 and self.name or self.text and get_fd(args):read('a') + end + + function shell:trigger(env, ctx, args) + local fd = get_fd(args) + if self.text then + local t = fd:read('a') + fd:close() + if #t ~= 0 then + env.engine:commit_text(t) + end + end + ctx:clear() + end + + return shell +end + +---Evaluate 宏, 執行給定的 lua 表達式 +---name 非空時顯示其值, 否则顯示實時調用結果 +---expr 必須 return 一個值, 其類型可以是 string, function 或 table +---返回 function 時, 該 function 接受一個 table 參數, 返回 string +---返回 table 時, 該 table 成員方法 peek 和 eval 接受 self 和 table 參數, 返回 string, 分别指定顯示效果和上屏文本 +---@param name string +---@param expr string +local function new_eval(name, expr) + local f = load(expr) + if not f then + return nil + end + + local eval = { + type = macro_types.eval, + name = name, + expr = f, + } + + function eval:get_text(args, getter) + if type(self.expr) == "function" then + local res = self.expr(args) + if type(res) == "string" then + return res + elseif type(res) == "function" or type(res) == "table" then + self.expr = res + else + return "" + end + end + + local res + if type(self.expr) == "function" then + res = self.expr(args) + elseif type(self.expr) == "table" then + local get_text = self.expr[getter] + res = type(get_text) == "function" and get_text(self.expr, args) or nil + end + return type(res) == "string" and res or "" + end + + function eval:display(ctx, args) + if #self.name ~= 0 then + return self.name + else + local _, res = pcall(self.get_text, self, args, "peek") + return res + end + end + + function eval:trigger(env, ctx, args) + local ok, res = pcall(self.get_text, self, args, "eval") + if ok and #res ~= 0 then + env.engine:commit_text(res) + end + ctx:clear() + end + + return eval +end + +---@param input string +---@param keylist table +local function get_macro_args(input, keylist) + local sepset = "" + for key in pairs(keylist) do + -- only ascii keys + sepset = key >= 0x20 and key <= 0x7f and sepset .. string.char(key) or sepset + end + -- matches "[^/]" + local pattern = "[^" .. (#sepset ~= 0 and sepset or " ") .. "]*" + local args = {} + -- "echo/hello/world" -> "/hello", "/world" + for str in string.gmatch(input, "/" .. pattern) do + table.insert(args, string.sub(str, 2)) + end + -- "echo/hello/world" -> "echo" + return string.match(input, pattern) or "", args +end + +-- 從方案配置中讀取宏配置 +local function parse_conf_macro_list(env) + local macros = {} + local macro_map = env.engine.schema.config:get_map(env.name_space .. "/macros") + -- macros: + for _, key in ipairs(macro_map and macro_map:keys() or {}) do + local cands = {} + local cand_list = macro_map:get(key):get_list() or { size = 0 } + -- macros/help: + for i = 0, cand_list.size - 1 do + local key_map = cand_list:get_at(i):get_map() + -- macros/help[1]/type: + local type = key_map and key_map:has_key("type") and key_map:get_value("type"):get_string() or "" + if type == macro_types.tip then + -- {type: tip, name: foo} + if key_map:has_key("name") or key_map:has_key("text") then + local name = key_map:has_key("name") and key_map:get_value("name"):get_string() or "" + local text = key_map:has_key("text") and key_map:get_value("text"):get_string() or "" + table.insert(cands, new_tip(name, text)) + end + elseif type == macro_types.switch then + -- {type: switch, name: single_char, states: []} + if key_map:has_key("name") and key_map:has_key("states") then + local name = key_map:get_value("name"):get_string() + local states = {} + local state_list = key_map:get("states"):get_list() or { size = 0 } + for idx = 0, state_list.size - 1 do + table.insert(states, state_list:get_value_at(idx):get_string()) + end + if #name ~= 0 and #states > 1 then + table.insert(cands, new_switch(name, states)) + end + end + elseif type == macro_types.radio then + -- {type: radio, names: [], states: []} + if key_map:has_key("names") and key_map:has_key("states") then + local names, states = {}, {} + local name_list = key_map:get("names"):get_list() or { size = 0 } + for idx = 0, name_list.size - 1 do + table.insert(names, name_list:get_value_at(idx):get_string()) + end + local state_list = key_map:get("states"):get_list() or { size = 0 } + for idx = 0, state_list.size - 1 do + table.insert(states, state_list:get_value_at(idx):get_string()) + end + if #names > 1 and #names == #states then + local radio = {} + for idx, name in ipairs(names) do + if #name ~= 0 and #states[idx] ~= 0 then + table.insert(radio, { name = name, display = states[idx] }) + end + end + table.insert(cands, new_radio(radio)) + end + end + elseif type == macro_types.shell then + -- {type: shell, name: foo, cmd: "echo hello"} + if key_map:has_key("cmd") and (key_map:has_key("name") or key_map:has_key("text")) then + local cmd = key_map:get_value("cmd"):get_string() + local name = key_map:has_key("name") and key_map:get_value("name"):get_string() or "" + local text = key_map:has_key("text") and key_map:get_value("text"):get_bool() or false + local hijack = key_map:has_key("hijack") and key_map:get_value("hijack"):get_bool() or false + if #cmd ~= 0 and (#name ~= 0 or text) then + table.insert(cands, new_shell(name, cmd, text)) + cands.hijack = cands.hijack or hijack + end + end + elseif type == macro_types.eval then + -- {type: eval, name: foo, expr: "os.date()"} + if key_map:has_key("expr") then + local name = key_map:has_key("name") and key_map:get_value("name"):get_string() or "" + local expr = key_map:get_value("expr"):get_string() + local hijack = key_map:has_key("hijack") and key_map:get_value("hijack"):get_bool() or false + if #expr ~= 0 then + table.insert(cands, new_eval(name, expr)) + cands.hijack = cands.hijack or hijack + end + end + end + end + if #cands ~= 0 then + macros[key] = cands + end + end + return macros +end + +-- 從方案配置中讀取功能鍵配置 +local function parse_conf_funckeys(env) + local funckeys = { + macro = {}, + } + local keys_map = env.engine.schema.config:get_map(env.name_space .. "/funckeys") + for _, key in ipairs(keys_map and keys_map:keys() or {}) do + if funckeys[key] then + local char_list = keys_map:get(key):get_list() or { size = 0 } + for i = 0, char_list.size - 1 do + funckeys[key][char_list:get_value_at(i):get_int() or 0] = true + end + end + end + return funckeys +end + +-- 按命名空間歸類方案配置, 而不是按会話, 以减少内存佔用 +local namespaces = {} +function namespaces:init(env) + -- 讀取配置項 + if not namespaces:config(env) then + local config = {} + config.macros = parse_conf_macro_list(env) + config.funckeys = parse_conf_funckeys(env) + namespaces:set_config(env, config) + end +end +function namespaces:set_config(env, config) + namespaces[env.name_space] = namespaces[env.name_space] or {} + namespaces[env.name_space].config = config +end +function namespaces:config(env) + return namespaces[env.name_space] and namespaces[env.name_space].config +end + +-- ######## PROCESSOR ######## + +local function proc_handle_macros(env, ctx, macro, args, idx) + if macro then + if macro[idx] then + macro[idx]:trigger(env, ctx, args) + end + return kAccepted + end + return kNoop +end + +function yuhao_switch_proc.init(env) + if Switcher then + env.switcher = Switcher(env.engine) + end + + -- 讀取配置項 + local ok = pcall(namespaces.init, namespaces, env) + if not ok then + local config = {} + config.macros = {} + config.funckeys = {} + namespaces:set_config(env, config) + end +end + +function yuhao_switch_proc.func(key_event, env) + local ctx = env.engine.context + if #ctx.input == 0 or key_event:release() or key_event:alt() then + -- 當前無輸入, 或不是我關注的鍵按下事件, 棄之 + return kNoop + end + + local ch = key_event.keycode + local funckeys = namespaces:config(env).funckeys + if funckeys.macro[string.byte(string.sub(ctx.input, 1, 1))] then + -- 當前輸入串以 funckeys/macro 定義的鍵集合開頭 + local name, args = get_macro_args(string.sub(ctx.input, 2), namespaces:config(env).funckeys.macro) + local macro = namespaces:config(env).macros[name] + if macro then + if macro.hijack and ch > 0x20 and ch < 0x7f then + ctx:push_input(string.char(ch)) + return kAccepted + else + local idx = select_index(key_event, env) + if idx >= 0 then + return proc_handle_macros(env, ctx, macro, args, idx + 1) + end + end + return kNoop + end + end + + return kNoop +end + +function yuhao_switch_proc.fini(env) +end + +-- ######## TRANSLATOR ######## + +-- 處理宏 +local function tr_handle_macros(env, ctx, seg, input) + local name, args = get_macro_args(input, namespaces:config(env).funckeys.macro) + local macro = namespaces:config(env).macros[name] + if macro then + local text_list = {} + for i, m in ipairs(macro) do + table.insert(text_list, m:display(ctx, args) .. index_indicators[i]) + end + local cand = Candidate("macro", seg.start, seg._end, "", table.concat(text_list, " ")) + yield(cand) + end +end + +function yuhao_switch_tr.init(env) + -- 讀取配置項 + local ok = pcall(namespaces.init, namespaces, env) + if not ok then + local config = {} + config.macros = {} + config.funckeys = {} + namespaces:set_config(env, config) + end +end + +function yuhao_switch_tr.func(input, seg, env) + local ctx = env.engine.context + local funckeys = namespaces:config(env).funckeys + if funckeys.macro[string.byte(string.sub(ctx.input, 1, 1))] then + tr_handle_macros(env, ctx, seg, string.sub(input, 2)) + return + end +end + +function yuhao_switch_tr.fini(env) +end + +-- ######## RETURN ######## + +return { + proc = yuhao_switch_proc, -- 開關管理-processor + tr = yuhao_switch_tr, -- 開關管理-translator +} diff --git a/beta/hotfix/lua/yuhao/yuhao_tc_first.lua b/beta/hotfix/lua/yuhao/yuhao_tc_first.lua new file mode 100644 index 0000000..5a684d9 --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_tc_first.lua @@ -0,0 +1,64 @@ +-- Name: yuhao_tc_first.lua +-- 名称: 大陸傳統字前置 +-- Version: 20230918 +-- Author: forFudan 朱宇浩 +-- Github: https://github.com/forFudan/ +-- 版權聲明: +-- 專爲宇浩輸入法製作 +-- 轉載請保留作者名和出處 +-- Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International +--------------------------------------- +-- +-- 介紹: +-- 將候選中的大陸傳統字前置 +-- 《古籍通規》中的14250字 +-- +-- Description: +-- Prioritize Tranditional Chinese characters +-- +-- 版本: +-- 20230918: 初版 + +--------------------------- + +local str = +"吖啊哎哀埃挨唉欸捱啀嘊敳皚毐矮噯濭藹靄艾㤅侅隘愛閡僾壒鴱薆嬡璦𣜬𣋞曖餲懝瞹馤礙譺靉安菴庵啽媕㛺腤痷鞍鞌盦諳馣鮟鵪韽埯唵揞罯犴岸按洝桉豻案婩晻遃暗儑闇䬓𩹎黯𪒠卬昂㭿䩕𡵙枊㼜盎醠凹㕭𤏶䫜爊𪃨敖隞嶅遨嗷獓廒滶璈獒摮熬磝聱螯翱謷謸𩪋鏖鷔鰲䥝鼇芺拗袄镺媼襖坳奡傲奧慠墺𡒃嶴懊鏊驁𩼈八巴叭朳芭吧岜疤捌蚆哵笆羓粑豝𩡩鈀䶕犮㧊坺拔茇𢇷妭胈癹菝軷跋魃䮂鼥把弝爸𥝧耙垻跁靶罷矲䆉䎱霸壩灞欛㓦掰白百佰柏捭擺扒拜唄敗猈稗粺韛攽朌班斑搬頒斒瘢螌癍辬䰉阪坂板瓪昄版粄鈑䬳蝂魬半扮𠯘伴姅湴絆靽辦瓣邦帮垹梆浜幫綁榜牓玤蚌棒棓硥蒡徬䰷謗勹包苞𡶄孢㚿胞褒齙仢雹䈏懪𦢊保堢葆堡飽駂褓鴇寶抱豹菢袌報鉋靤骲暴虣鮑儤瀑爆陂杯卑柸盃桮悲碑鵯襬䥯北孛邶貝㸬背倍狽悖被菩梖㫲偝㔨琲備焙蓓碚鞁𣖾骳誖褙輩䰽憊糒㶔奔倴犇錛本苯畚体坌𢪘笨渀伻祊崩閍絣嗙繃埄菶唪琫琣𦂌䩬迸埲堋跰甏畐偪逼楅豍䠋鵖鎞荸鼻匕比吡佊疕沘𠛡妣彼柀秕俾舭粃啚筆鄙箄貏㻶必㘩坒佖𤜻庇邲𨚓㧙苾畀泌怭珌柲毖胇𢘍陛畢狴𦱔梐閉䏶庳敝婢堛賁皕貱詖湢愊愎弼蓽蓖閟蜌嗶鉍飶腷痹煏滭裨彃碧蔽馝箅獙弊幣熚鄪䪐綼髲駜罼𥻅獘潷薜觱螕篳篦鮅廦鴓壁避嬖縪䟆蹕髀斃臂奰饆鄨璧鞸襣襞繴韠䌟躃躄贔鸊鼊砭萹猵牑甂蝙箯編鞭邊鯿籩窆扁匾貶碥褊鴘藊⟡卞弁抃釆汳汴忭𨚕拚昪便䛒徧遍閞䪻艑辨辮辯變髟彪淲猋蔈幖颮滮標熛䅺瘭儦瀌鏢穮驃飆鑣驫表婊裱㟽錶褾俵摽鰾𧌽憋蟞䳤鷩鱉鼈虌别咇莂蛂䟤徶襒𧝬蹩癟彆䌘汃份邠玢彬斌㻞豩賓豳獱濱璸檳𣰨瀕繽鑌顮儐擯殯臏髕鬢冰兵栟掤丙邴秉怲柄昞炳𠱛窉蛃琕棅鈵稟鉼餅鞞并併並庰病偋摒寎䗒蔔波玻柭砵趵袚剝菠缽紴鉢碆僠播撥嶓餑鮁磻嚗蹳鱍彴伯帛瓝泊勃侼胉挬亳浡桲㪍㹀舶㼎脖㶿袹艴博葧𠷺䬪渤搏㗘鈸鉑𤊹駁僰𨁝馛箔煿踣䙏駮薄䗚馞䳁鮊𩣡襏㩧鵓簙鎛餺𩷚髆犦欂㿺襮䂍礴鑮𩍿蚾跛簸檗擘蘗啵抪逋峬庯晡餔轐醭卜捕哺補鳪䪁𪇰不布步佈咘怖部埠瓿蔀踄篰餢䒀鞴䴺簿𨺭攃擦啋偲猜才材財裁纔采採彩寀婇睬跴綵踩䰂埰菜棌蔡縩䌨飡飱傪餐䟃䱗驂戔殘慚蠶朁慘噆憯㿊黲粲嘇璨燦謲倉傖凔蒼獊滄艙鶬藏操糙曹嘈嶆漕槽𥕢褿螬艚草愺懆騲肏鄵册畟厠笧側粣𡍪萴策廁測惻筴矠墄簎㠁篸岑涔梣嶜嶒層驓蹭叉扠杈臿䑡差插靫嗏喳艖鍤鎈秅㡸垞茬茶查㢉搽嵖𣘻䁟䤩察䕓䶪蹅鑔汊奼岔侘刹衩㤞姹詫拆釵柴豺祡喍儕茝蠆𧓽辿㚲梴覘惉裧幨襜攙䪜棎孱鋋獑誗撣儃廛潺嬋磛澶毚鄽蟬𧴃瀍蟾儳劖繵嚵巉瀺欃纏躔讒鑱饞丳剗産剷嵼滻蕆幝諂燀繟鏟闡䑎囅讇硟摲懺羼韂昌倀菖猖娼閶鯧鼚長萇常徜場腸嘗裳嫦瑺䠆償鱨昶惝敞廠𢠵氅鋹倡鬯唱淌悵暢畼韔抄怊弨訬超鈔罺晁巢鄛漅樔嘲潮窲轈鼂吵炒煼麨耖車唓𤥭硨蛼扯屮坼𥿊䞣硩掣𤊿撤徹澈䚢抻郴捵琛棽䐜綝瞋賝𤡳謓臣辰沉忱莐宸陳桭晨愖蔯煁樄塵敶霃諶螴麎趻𧿒墋磣踸鍖疢趁齔儭嚫櫬襯䞋讖琤棦偁庱䟫摚䞓稱撑樘噌赬橖瞠檉竀蟶朾成丞呈郕承城宬埕乘珵掁盛脭揨棖程筬裎塍誠酲鋮澂澄憕橙懲騬逞騁秤吃郗哧胵蚩眵笞瓻喫摛嗤媸絺瞝螭鴟魑𧴐癡齝黐池弛坻泜持拸荎匙蚳傂馳遟漦墀踟遲篪䜄鶗尺扡侈哆胣恀姼耻蚇䏧豉蚸㢋袲鉹齒褫彳叱斥赤杘抶侙恜翅眙𦐊敕痓淔飭啻湁雴傺痸憏𤸪瘛熾䠠懘鶒饎騺冲充𡉥沖忡茺㤝珫浺翀舂䘪摏𠟍憃衝憧𪎽𧝎蹖艟䡴虫种崇痋蟲爞寵揰銃蹱抽眣㨨搊㮲篘瘳犨犫怞菗惆紬椆酬稠愁詶裯綢𨞪儔鮋㵞薵幬懤檮疇籌醻躊魗讎𪇘䲖丑偢瞅醜溴殠出初摴𩨸樗貙齣除芻蒢滁耡趎蓫蒭蜍鉏犓䅳篨鋤廚藸躇䠧幮雛櫥鶵躕杵處楮楚濋儲礎𪓐齼亍怵㤕炪俶畜絀琡䟣傗鄐搐滀閦諔歜黜斶臅觸矗䫄搋揣嘬川穿剶猭舡船遄圌椽傳篅輲舛荈喘歂僢踳串釧賗鶨囱創窗摐戧牕瘡牀噇幢橦𡻯㼽磢闖愴吹炊䜅垂倕陲捶棰椎腄槌箠錘顀鎚杶春䡅椿輴櫄浱純脣淳犉蒓蓴漘醇錞鶉胊偆惷蠢趠踔戳辵叕娖逴啜𢔄惙婼婥綽輟擉歠蠚齪疵偨骴𥰭髊蠀齹茨柌垐祠瓷詞慈磁雌飺餈糍薋鴜辭鷀此佌泚玼跐鮆次刺佽庛栨蚝莿㾊蛓絘𨋰賜螆䳐匆悤葱璁瑽樅𣎗熜瞛聰蟌繱鏓鏦驄从𠤰從淙悰琮漎潨賨藂𧐱叢憁謥揍湊楱腠輳觕粗麤徂殂䣯促猝𧋥瘄蔟醋噈憱瘯簇蹙蹴汆攛攢巑灒欑𣪁篡竄鑹爨崔催凗摧榱縗鏙漼璀趡皠倅脆萃啐淬悴琗毳焠瘁粹翠綷顇竁襊臎村皴存𨚲侟踆刌忖寸搓瑳遳磋撮蹉嵯矬痤䣜㽨瘥醝鹺脞剉挫莝厝措蓌銼錯䱜耷搭榙𦞂褡噠呾狚怛妲羍炟笪匒達𢛁答靼㩉薘䃮䵣蟽𦪭躂韃打大獃歹傣代汏垈岱隶迨玳殆待怠軑埭帶袋逮紿貸瑇䲦曃戴黛蹛襶靆丹妉担眈耽聃酖躭單匰鄲儋勯擔殫甔襌䄡簞𩅦抌疸紞亶黕膽𤺺𪆻黵旦但䏙萏啗啖淡蛋啿蜑觛誕窞髧噉僤䩥嘾潬憚彈鴠𢠸澹憺禫膻癉𥨎贉嚪霮黮當儅噹璫襠簹鐺党擋黨攩灙欓讜𩽳宕菪瓽逿愓嵣碭潒蕩壋踼燙檔盪簜刀𣱼忉舠魛倒島禂搗導壔擣蹈禱到菿悼道盜翢稻䆃翿纛得德登豋䔲燈㽅㲪簦蹬鐙等戥僜隥凳鄧嶝磴瞪低袛羝隄堤滴磾鍉鞮狄苖迪籴荻笛靮髢滌頔嫡翟樀踧敵䯼嚁鏑覿糴鸐氐厎邸阺抵底弤柢牴砥詆骶地玓杕旳弟𦉹的帝递娣珶菂第釱焍蒂棣睇渧媂遞禘摕蔕遰慸甋締踶諦螮𥳠鬄佔敁掂𠶧嵮滇瘨蹎顛𩥄攧巔癲齻典蒧蕇踮點㓠甸阽坫店玷扂埝淀惦奠電蜔殿墊靛澱磹簟癜驔刁虭凋奝蛁彫琱貂碉𩾗雕鼦鵰鯛屌弔吊掉釣蓧雿銱藋嬥爹跌迭垤昳峌胅瓞镻堞耋喋崼詄惵絰殜跮牒墆碟蜨嵽褋䪓蝶艓蹀諜褺螲鞢𨄌鰈疊㲲丁仃叮玎盯疔耵虰釘靪𩾚酊頂葶鼎㴿濎𤐣矴定訂飣椗碇𦩘鋌錠顁𩸎丢颩冬東咚涷蝀䍶䳉鼕董蕫懂挏迵洞戙胴凍動棟湩絧詷駧唗兜篼斗抖陡蚪鈄豆郖逗鬥浢酘脰痘𧱓䛠餖竇厾𦘴都督嘟裻闍毒𤠢𦺇蝳㒔獨𨽍䢱瀆嬻瓄櫝殰犢牘髑贕讀韣韇黷讟堵帾䐗睹賭篤芏杜肚妒度秺渡殬鍍蠹剬端褍𧤗短段塅椴腶煅碫緞毈鍛斷䠪籪堆塠搥磓䭔兑祋碓對䬽憞憝薱𣝉懟㬣瀩鐓䨴𪒡惇敦蜳墩蹲驐庉沌炖盾𥫱遁鈍頓遯燉多咄剟掇敠毲剫敚喥奪𨍏踱鐸𩍜朶垜挅埵𧻞躱𤛛鬌軃嚲奲沲陏陊刴柁柮𣵺舵惰跢跥飿墮嶞墯𥳔鵽阿妸屙婀吪囮俄莪哦峨涐娥訛睋蛾誐頟鵝額譌騀厄歺戹阨扼呃阸枙砐侉峈峉姶砨堊軛㓵鄂堨堮惡萼㕎遏遌崿㔩愕搕搹搤腭詻蝁𥔲䔾餓頞噩嶭諤鍔礏顎𡾲鶚鰐齃齶鱷恩䭓䭡而兒陑荋耏洏栭胹𥅡唲聏輀髵鴯鮞鱬耳洱珥毦栮爾餌駬薾邇二刵佴咡䎶貳衈鉺樲發乏伐茷垡疺栰筏閥罰瞂墢法灋琺髮帆番幡憣藩翻旛轓籓鱕凡袢笲煩墦蕃樊璠薠膰燔繁羳繙颿蹯蘩礬瀿蠜䪤反返䡊犯氾汎泛范畈軓梵販飯軬𧍙範方邡坊芳汸枋牥蚄鴋防妨肪房魴仿彷昉瓬倣舫紡訪髣放妃非飛婓啡扉裶緋霏馡騑肥淝𩇯腓蜰蟦朏匪陫菲悱棐斐𢾺榧蜚翡誹篚𦃄芾吠杮肺狒沸昲厞剕俷疿萉屝費痱䠊廢㵒曊鼣癈鯡靅分芬吩岎帉㤋昐氛衯翂紛棻雰餴饙汾妢枌蚡蚠羒棼焚蒶隫墳蕡幩鳻魵獖濆鼢鼖羵轒豶馩䴅黂粉坋弅忿僨憤奮膹糞瀵鱝丰䒠封風峰桻偑烽葑猦犎楓蜂瘋熢鋒豐鏠酆蘴灃蠭麷捀逢浲渢摓漨縫覂諷奉俸鳳賵佛𧼴紑𧉈缶否缹殕鴀夫邞玞荂柎砆怤衭荴趺䓵跗稃鈇筟鄜粰𤊻孵鳺麩敷膚𩿧䱐懯巿弗伏扶芙芣孚刜坲拂苻茀枎咈帗岪服泭怫垘茯枹罘俘郛洑祓莩栿蚨浮琈菔桴虙符匐烰涪袱紱紼葍幅罦䟮蜉鳧福綍𤛟箙颰韍𨌥髴𩊙蝠幞澓𩢰𦽏輻踾鮄黻䵾䳕鵩鶝𧖚甫㕮拊㓡斧府弣郙俛胕俯釜捬脯腑滏輔腐撫頫䩉簠黼父付㳇附坿咐阜赴复負訃祔蚥㾈副蚹偩婦萯傅復富椱腹𠣾褔複駙蕧賦蝮蝜𩾿輹鮒縛賻鍑𥨍覆馥𥳇䘀鰒旮咖嘎噶尬陔垓荄晐胲祴絯賅該䬵改丐匄摡蓋戤漑槪干甘忓奸杆肝坩泔柑竿疳筸鳱尷芉秆衦皯桿笴𠭖𣪏敢稈感趕澉橄擀篢𦾮䃭簳鰔鱤㔶旰汵矸盰淦紺骭詌幹贛灨扛肛矼岡㼚缸罡剛笐掆𦱌釭䚗棡犅碙頏綱鋼港䴚杠皋高羔䓘䔌槔睾膏篙糕櫜鼛鷎杲菒槁暠稿犞縞告郜祰誥戈哥胳袼割滒歌鴚𪀁鴐擱鴿匌革茖㭘格𢯹葛蛤蛒裓隔塥嗝觡滆槅閤閣膈鞈骼獦韐輵鮯鵅轕哿舸个各䧄虼個箇根跟亙艮更庚耕浭絚賡緪鶊羹郠埂耿哽梗𦵸綆骾鯁堩𣈶䱍䱭工弓公功攻䢼供肱恭蚣躬宮觥碽匔𩃙龔汞拱珙㧬拲栱䂬輁鞏𥨐共羾貢勾㽛袧䑦㡚鉤溝褠緱篝𦩷韝苟岣狗耇枸耈笱垢姤冓够遘搆彀㝅雊詬㝤媾構煹覯購估苽咕呱沽泒孤姑柧胍罛菰蛄蓇辜軲軱酤觚𦋆鈲箍箛鴣橭扢谷汩股骨牯罟𤞞羖淈詁愲鼓榾賈鈷榖嘏穀縎轂餶瞽盬瀔蠱固故㽽堌梏崓崮牿雇祻稒痼錮顧瓜㧓刮䒷䀨劀緺䯏颳鴰騧冎剮寡卦挂罣詿褂乖拐柺𧊅罫夬怪𢶒䯤官冠倌𢇇棺瘝關鰥𢺄觀鱞琯筦痯管錧館毌丱涫貫悹祼摜慣盥灌瓘爟矔罐鱹光侊洸桄胱輄廣獷俇逛圭邽皈珪規傀窐袿廆瑰摫閨槻嬀瞡龜鮭歸𩷪騩䲅氿宄庋佹陒垝軌鬼恑姽癸匭晷蛫湀詭厬簋蟡攰昋炔桂貴筀猤𧵥跪撌劌劊䳏檜禬櫃癐襘䞈鞼鱖衮蓘䃂滚𩨬緄輥㯻鯀棍睔郭堝崞聒瘑嘓㗻濄鍋蟈彍國摑蔮𦸈幗虢膕簂馘㶁果𠜴猓惈椁蜾裹粿錁過咍嗨孩骸海醢亥妎㤥害嗐駭蚶頇酣谽憨鼾邗邯含函虷㟏琀㖤崡涵寒甝䈄韓罕䓍焊喊蔊㯺豃鬫㘚扞汗旱𤽂垾捍唅涆浛悍菡閈淊㨔睅馯漢暵銲熯撼翰頷憾駻䗣顄雗𪁟瀚䮧夯㬻行苀吭迒杭𣃚蚢䘕航䲳沆茠蒿薅嚆呺毫號嗥豪諕壕㩝嚎濠蠔好郝号昊耗浩淏皓鄗滈皞皜澔鎬顥灝呵訶䶎𪖨禾合何和郃𠗂劾河垎曷紇盍荷核盉菏蚵盒渮涸毼貉麧㿥頜翮螛鞨礉齕䳚闔覈䶅龢賀嗃赫熇𣻵褐翯壑嚇謞鶴黑拫痕佷哏很䓳恨亨哼脝恆姮珩桁胻䯒橫衡蘅啈吽哄哅訇烘硡渹𥔀谾薨𦒃嚝鍧𤃫轟弘玒𡵓汯宏泓虹竑洪紅耾翃浤紘谹葒閎鈜竤渱谼鞃䃔魟篊鋐蕻霐彋𩶥鴻䬝黌嗊𠳃訌澒澋鬨齁侯鄇喉猴篌糇翭鍭餱䳧鯸吼㖃㸸后郈厚垕逅後候𥅠堠豞䞀鱟乎垀昒呼曶忽𠦪虖唿㳷淴惚滹幠膴𩶈抇囫狐弧胡㪶斛搰壺葫㗅猢湖瑚蔛槲蝴箶衚魱糊𧏚縠醐䭅觳餬鵠鬍瀫鶘鶻鰗虎琥䗂箎滸互户芐冱枑昈岵怙戽祜㱿䇘笏瓠扈婟楛嗀綔鄠㨭蔰滬寣嫭槴鳸豰嚛護䨼韄鸌鱯花蘤㕲咶華猾滑嘩螖𦽊鏵驊䱻鷨化杹崋畫話摦樺劃槬㗲澅嫿繣𩸄蘳徊淮槐踝㠢瀤懷櫰䃶蘹𣸎壞鴅鵍酄獾歡䑏貛讙驩鸛㡲荁狟洹垸桓萈梡雈貆獂綄𦼉還澴寰嬛環鍰繯闤鐶鬟瓛䴉㬊緩幻𤴯奐宦浣患逭換睆喚渙瑍豢煥漶槵擐澣䍺䴷鯇攌轘嚾巟肓荒衁䀮㡛慌𥉂皇偟𨜔凰隍揘黃葟喤遑徨湟惶煌潢璜蝗篁艎蟥簧鍠餭趪騜鐄𤰀鰉鱑𦬺怳炾恍晃幌𦟮謊𣄙櫎爌滉愰榥皝灰恢豗倠眭揮𤟤𧱉暉䖶詼煇幑褘撝輝噅㺔麾翬徽隳𩻟鰴回佪茴迴洄恛蛔鮰虺𠧩悔𤈦毁毇檓燬卉泋恚彗晦惠喙匯賄會彙嘒誨瘣慧蕙暳螝圚潓嬇薉薈橞𡼾頮獩諱濊嬒篲燴嚖蟪穢繢翽譓䜋繪闠鏸𧬨靧鐬䎚顪䵻昏𠉣涽惛婚葷棔殙閽㑮湷渾琿魂㨡楎腪餛䮝鼲眃俒圂倱掍混溷慁諢䫟鯶耠劐騞佸活姡秳火伙夥䴹㘞或泧捇眓剨𡿿貨惑𣄸湱禍蒦𤬁𦞦䁨㦎𨘌奯霍嚄獲濩檴𧯆雘謋𤐰豁礊䨥矆矱穫𧞤攉藿蠖瀖㸌矐鑊靃䂄几丌卟𥝌圾芨机乩刏肌枅虮㚻剞唧笄飢屐姬基𨊻聐攲犄嵇幾𣪠畸稘䇫箕僟銈踑嘰稽䈕觭畿璣機墼積錤激襀禨隮䩭擊磯𧐐櫅雞䪡譏轚鐖饑鞿躋齎羇齏羈𧆌亼及尐伋吉岌彶汲忣极皀佶𠙆亟笈卽𠙏狤急姞級𤥐揤𨛳觙疾堲𠦫谻庴㥛極棘殛戢集湒塉𢱣蒺楫蝍嵴嫉耤槉膌蕀蕺踖㗱㠍瘠濈潗䣢輯𧤏蹐㸅襋𧥄霵籍鏶鶺鷑雧䯂己丮泲脊掎戟𢜭給麂魢撠擠穖濟蟣䤒𩯋旡㞦䢋伎技芰忌妓季垍茍峜計迹洎紀𦮼記紒𨜒𠴫旣徛祭悸寄寂㠱惎臮勣裚䟱跡鬾痵際㨳㮨跽䗁㹄穊墍魥誋漈漃禝㡭諅稷髻薊冀穄曁劑薺檕𢢞嚌覬罽績櫭檵蹟鯽齌鵋穧鯚癠懻𩥉蘮瀱鱀繼𨣧蘻霽鰿鰶𦇧䰏鱭驥䶩加夾𡶐佳泇迦珈枷痂浹家耞梜笳𧉪袈葭𨔣跏傢猳犌腵𣮫嘉鉿豭貑麚圿扴忦郟恝莢唊戛脥袷裌跲蛺骱䛟擖鋏𩛩頰鵊𪇷甲岬玾胛叚假斝徦椵鉀榎瘕檟架幏嫁稼價駕幵尖玕玪肩姦兼菅菺堅豜猏靬䓸葌㓺犍牋湔䋗瑊搛蒹椷椾煎𢳚監箋鳽蕳樫鋑𪊑熞緘㔋熸縑麉艱鞬黚馢餰礛鵳瀸櫼殲鶼籛鰹虃韉鑯𪙨𪒹囝柬挸梘帴湕揀揃減暕筧絸戩儉翦橏檢𨢑蹇謇襇繭瞼簡䉍鬋蠒𡾰𧬯瀽𢺃鹻㶕譾襺𧟉鹼𧮈件見建荐牮洊珔栫俴健㣤徤釰葥楗臶間閒毽腱寋蔪𥯦僭漸賤踐𡼏箭劍諓𤾕澗薦鋻鍵餞諫𦾶鍳磵瞷螹檻濺鏩艦鐧轞鑒鑑江𢪇茳姜豇畕將畺僵漿壃薑橿殭螿礓䕬疆繮𩝫韁𧅁鱂傋𤟌蔣勥㢡奬槳獎耩膙講顜匠弜降洚袶弶𨟻絳滰嵹𤖕𪀘糨醬交郊茮茭𥄉䢒姣𣐹椒蛟焦𧣦嘄僬𣻏蕎蕉嶕嶣膠澆憍嬌膲憿礁蟂𪁉鮫鵁轇蟭𡂢簥㶀𨶲鐎𪚰驕鷮鷦筊角佼狡捁晈烄皎脚䘨湫絞敫腳剿勦摷鉸撟劋儌敿璬曒矯蟜皦䚩譑孂攪鱎叫𡥈挍訆珓校悎窌教窖滘斠酵𠻘嘂餃噍嶠潐噭𥡱徼獥嬓藠趭轎醮譥㬭䂃皭釂皆㡇袓掲接菨𣆟秸痎階堦揭椄喈嗟街湝鞂稭㾬𦁉擑蝔𨲠𧪰鴶癤鶛䕸卩孑卪刦刧劫㞏岊劼刼杰疌衱拮𠃲洯𡔣莭桔倢桀訐捷𧉧崨偈𨥂𢈻𣶏袺婕䀹蛣傑結趌搩楬㮞睫蜐嵥節魝詰楶滐𦀖截㮮榤碣㓗竭𢴲𢧵踕㠎羯潔𧼨𣚃𡽱嶻鮚巀䌖𪃈蠘䲙𩯰蠽姐解檞丯介价戒芥𡗦𡵚岕㝏玠𤘦屆届𢦶砎畍界疥衸蚧借悈唶堺琾蛶觧䯰𩡺犗誡艐䲸魪褯藉𧞔繲𨈁巾斤今金觔津衿𦘔珒矝紟筋釿䘳㻱黅鹶䈥㦗䃡䈽襟卺巹菫厪僅蓳緊廑漌瑾斳𧯷槿𦂳𠪲𥯑儘錦㢙㯸謹饉伒仱近妗枃晋晉𦧈浸㶳唫進祲𥁞鄑𣈆臸𣷽搢靳禁溍𣹰寖瑨墐㨷榗㬐𡩻盡璡殣僸䆮㬜噤濅𥧲𡫏賮縉藎㯲嚍濜嬧覲燼䌝贐䫴齽巠㸒京荆秔亰莖粇涇菁旌旍経葏晶稉睛粳經兢箐精𨿋䪫鵛鶄𪂴鯨鶁麖鼱驚䲔麠井阱汫剄穽烴景儆璄幜憬璥璟憼頸暻燝蟼警䜘勁俓𠗌逕倞徑凈竞𩇕桱脛竟竫淨婧敬痙竧傹靖境踁獍誩靚𩓞靜曔𥪰瀞鏡競竸冂冋坰垧扃埛㤯扄駉駫䮐𪕍冏囧炅迥泂逈炯浻烱絅煚窘綗𤌇煛僒熲褧顈丩勼朻㸨牞究糺糾赳𣪋揪啾揫鳩摎樛𨷺鬮𩏶𩏷九久乣玖灸韭酒韮𡆥臼㝌咎疚柩桕倃救厩𣪘䊆就廐舅僦廏舊䳎匶鯦麔齨𣡛𪆩鷲凥拘㘲苴狙匊沮泃居㞐𥘮捄挶砠眗罝疽痀掬据梮崌涺娵琚趄椐跔毱腒𥇛雎裾蜛艍𣻐駒䝻踘鋦鴡𥰬鮈𠤄𨟉鞠㪺鞫𣂏鶋𣂐𩌽𥷚𥷤𤓯𦥑局𨸰𡶋泦𡱈𣐊狊侷𢩁菊郹椈㮂湨輂蓻跼䗇僪趜𦺖橘駶檋𩀎𥢧鵙𧽻䕮䱡鵴蘜鶪𧄛鼳𪈓㪯弆柜咀岨莒矩𢯺椇䅓筥蒟榘踽舉𥱿𦦙擧𥴧櫸齟𦇙巨句拒苣岠邭𤝙洰姖歫具昛炬怚秬䀠蚷俱倨粔冣埧埾距𧣒詎惧焣跙犋鉅𡥶豦虡駏㩀㨿聚愳寠㜘劇勮𥉁踞據遽鋸𩗗澽懅窶𧇽𥲤颶屨𣝛貗𩰤簴䱟𨙊醵躆鐻懼㳙捐涓娟梋朘睃䅌䣺𪌭鵑鐫蠲𧆇呟埍捲菤詃錈臇㢧𢎥劵帣𠉮倦狷桊勌鄄圈眷淃睊罥雋䖭絭睠𥆞飬絹蔨嶲餋獧縳羂巂𦌾撅屩亅𠄌孓𨈐氒抉芵𠔌𧮫決弡玨玦㭈泬珏𤤴捔蚗倔欮𠜾赽掘桷䡈趹崛𠊬觖𤟎訣斍趉厥傕鈌絶較䘿𡲬駃瑴劂𠎮𦁐镼䞵撧蕨蕝䠇䟾𧍕爴嶡鴃獗瘚㵐潏憰鴂𢇍橛橜噱燋爵臄𧝃𩭪𣝣蟨蟩蹷蹶𧤾譎鶌匷矍嚼覺鐝鐍㩴觼爝𠑩攫鷢𢖦玃戄彏欔龣蠼𨏹躩貜钁均汮君𥘩軍袀莙蚐桾鈞碅銁銞皸麇鮶麏麕呁俊郡陖捃埈峻浚珺菌晙焌㻒葰䜭畯𡺲䐃竣𡍵𠹚蜠箟箘儁𡼕餕寯㕙燇駿𦿉濬鵔鵕攈𢹲攟衉䘔喀开揩開𢔡嘅剴凱慨塏楷輆嵦愷暟𥏪𨿘鍇闓鎧颽炌欬愾鎎刊𤬪𢦟栞勘𣓁堪嵁戡𪚕龕凵坎侃砍埳𡸞偘惂堿欿歁𠪚輡㙳轁顑轗竷看衎墈䘓𣊟輱磡瞰闞矙𡵻忼砊康嵻漮慷㝩槺㱂𥕎穅䆲䗧糠𨎍鱇骯亢匟伉邟抗犺炕閌尻𦙷嵪丂考攷拷栲烤𥬯犒銬靠鯌苛匼珂柯牱㸰科𢈈趷疴萪軻痾䂺𡻊犐𠏀窠薖榼䯊磕瞌蝌䈖頦窼醘顆髁礚壳咳殻揢可坷㞹岢炣敤嵑渴嶱㵣克㕉刻剋勊峇恪客尅𠳭堁䆟愘嗑𠞫溘愙䐦課𧛾緙騍肎肯𠳁啃豤墾𢢽懇𡓚珢掯褃阬坑坈殸牼硜硻誙銵䡠䃘䡩䡰鏗空倥埪𦱇崆涳悾硿箜孔恐控羫鞚芤剾摳彄瞘口叩扣佝怐敂𧥣釦寇筘蔻滱簆鷇𡉄矻刳挎枯桍哭堀崫䯇𩑔㲄窟骷𩨳𠏅𡼿㵠鮬𥖚䵈𪍠𪅏𪇄苦狜𩇵俈庫焅袴絝酷𨐡褲嚳夸𠇗姱絓䠸誇垮銙𩊓顝㐄胯跨骻𦳋蒯巜凷㹟快塊筷墤䈛儈鄶噲獪廥澮膾𥢶旝糩𩦱鱠寬臗髖欵款棵窾䥗匡劻洭恇筐誆𩢼狂軖誑鵟夼懭卝况框眶軦貺絖磺鄺壙黋曠懬礦穬纊䵃刲悝盔䯓窺虧闚𪖢蘬巋奎逵馗鄈揆葵暌魁𦝢戣睽蝰頯㙺藈櫆鍨騤䳫夔犪躨𡸖頍跬煃喟愧匱䙆蕢嘳潰憒樻餽聵簣𨣈饋䰎坤昆菎晜崑猑堃琨焜髡褌瑻錕騉鵾鯤鶤捆悃梱硱壼稛綑閫困睏括适栝葀萿蛞筈廓漷髺擴闊霩懖鞹鬠垃拉菈啦翋搚邋旯喇藞䖃剌瘌辣蝲臈䗶攋臘䃳蠟鑞𩧆來郲倈萊崍徠庲淶琜棶䅘𧳟騋鶆麳鯠勑唻睞賚賴藾𡃤瀨癩籟䲚婪啉嵐厱藍闌㜮㲯襤攔蘭㘓籃瀾斕襴籣灡䰐欗躝讕𨷻𦊔罱醂壈㩜擥懶𨎹覽孏攬灠欖纜僋嚂濫爁瓓𨣨爛䃹糷啷郎莨狼㝗琅蓈桹廊嫏瑯榔硠稂䆡𦵧蜋筤艆螂鋃駺𪁜㟍朗烺䀶閬埌浪㫰䍚蒗𩳤䕞撈牢哰浶勞㗦㟹僗嘮嶗䝁醪蟧簩䜎老荖狫恅栳銠潦橑䕩轑酪嫪澇憦癆耮嘞㔹仂阞扐艻叻玏泐竻勒𥖪鰳㗊雷蔂㒍嫘樏㹎擂㵢檑儡縲礌䍣瓃櫑𧒽羸礧罍纍鐳轠鑘𤜖鼺耒累絫傫誄𡻭磊蕾磥藟壘𡾋𤢹癗㵽礨灅蘽讄𥗬儽㶟鸓肋泪䒹洡淚酹攂類𥣬纇蘱禷棱楞碐稜輘薐冷倰堎愣䮚哩刕杝荲莉狸梨犁剺蜊筣漓璃孷嫠樆貍盠犛𨛫黎䅻㦒罹篱𥻿𦃇縭醨釐藜嚟𪁐離𨝖鵹鯬黧蘺酈灕㰚孋䍦䙰劙籬驪鸝李里𨛋峛俚𨓦娌理㾖𧋠豊裏澧禮鯉𥴡醴蠡邐鱧欚鱺力屴立朸吏利苙例沴戾荔㡂俐珕莅栛鬲栗唎秝㑦猁涖䓞唳笠𤟑粒悷𩫸棙厤詈𠌯凓痢蒚䔉鉝𤠫䇐溧慄瑮䰛厲蜧綟𨽹䬅𣛒勵歷曆篥鴗隸磿癘濿櫔鎘瓅藶櫟麗礪嚦瀝櫪礫䶘蠣皪糲鷅礰儷癧麜攦䟏䕻轢囇躒觻䍽䟐欐轣攭靂䚕㼖鱳𩽏帘連蓮嗹㡘慩廉漣溓覝奩磏䁠憐褳薕螊濂縺聯蹥臁謰燫𩄡鏈蠊簾鬑㺦㶌鐮鰱𪍴𨏩摙璉槤撿薟斂臉羷蘞浰萰僆湅楝煉練殮鍊鰊瀲欄戀良俍涼梁椋㹁粱踉綡輬䣼𩘁糧兩倆掚䓣脼裲蜽緉魎亮悢𣄴量晾喨輛諒佬聊尞僇嵺僚膋漻憀寥撩遼敹嘹嶛獠寮嫽璙𥲊療㵳蟟簝豂廫屪繚䝤髎鐐𤻲顟飉鷯了𧘈䑠釕鄝蓼憭燎瞭尥料撂廖𪖷列劣冽𠛱挒茢迾咧洌埒栵烈𠜺捩𥞥裂㽟蛚趔颲鴷鮤儠擸獵𤁯㯿𨆍犣躐𥷨鬣鱲拎厸林崊𡹇淋惏琳晽粦碄箖鄰粼㷠隣嶙獜潾璘霖燐臨磷瞵疄翷轔𧲂壣鏻驎鱗麟㨆菻僯凜廩懍檁䕲𠫤吝恡悋賃痳遴橉閵甐䗲藺蹸轥躪伶阾坽苓岭囹狑泠怜玲柃瓴朎皊凌竛陵聆菱㖫蛉崚笭舲翎羚淩㥄軨㱥跉詅祾零鈴蔆綾駖錂鴒魿澪霝𪕌酃鯪𢹝蘦齡櫺𦫃醽靈䴇𩵀欞麢龗袊領嶺另令𠺕斿留流琉硫裗遛旒𥹷榴磂劉瘤瑬疁蟉𧳽藰鎦䚧瀏鎏鏐飀騮鰡鶹䶉䬟珋柳鉚綹罶熮懰六翏塯廇溜磟霤餾雡飂㽌鷚𤵸𧙥隆嶐漋癃龍窿蘢嚨巃瀧瓏櫳曨朧𢤲矓礱龓籠聾蠪躘豅鑨驡鸗儱隴攏壟𢤱竉哢梇𡀔瞜婁𨻻蔞遱嘍㡞廔慺樓𤬏褸耬螻艛𦎹䝏𧁾鞻䫫髏䮫䱾塿摟嶁甊簍𪍣陋漏瘻鏤嚕玈盧壚蘆嚧㠠獹廬瀘瓐櫨𥌠臚爐𤬛矑罏籚艫纑轤鑪顱髗䰕鸕鱸黸鹵虜𢲸蓾滷樐魯擄瀂櫓氌艣艪𪈂甪坴峍陸菉硉鹿淥逯琭祿輅碌賂睩路稑盝剹勠摝蔍漉趢樚醁踛㼾熝戮蕗䍡穋錄𤢊潞璐簏𦪇𩣱騄轆蹗鵱麓簬鏕鯥騼露籙鷺閭氀膢䕡藘櫚鷜驢呂侶梠旅稆僂膂漊屢履儢縷𧃒律葎嵂綠慮膟繂濾爈㠥䥨鑢脟圝巒孿孌欒灓攣羉臠圞灤鑾鸞卵𡡗亂䂮掠略㗉鋝𧎾𧐯擽侖倫掄㖮崘崙圇淪惀棆蜦䑳綸輪鯩碖𦓾埨論捋螺攎羅覶騾覼儸蘿囉邏玀𤄷欏鸁籮鑼饠䯁砢倮蓏裸瘰蠃攞㦬㒩𩉙咯洛珞烙硌落笿絡摞鉻雒犖𩊚𥯛䃕駱鮥𪌳濼𨏒𧟌𪇱呣唔嗎媽麻嘛犘𥀏蟆𪓹馬䣕瑪碼螞鰢䀣傌㑻榪禡駡鬕䯦埋薶䁲霾買蕒佅脉麥勱賣邁霡顢姏悗㒼慲𩬞樠鞔瞞𥊑𥲑䊡䟂䜱謾饅鬗鬘𩆓鰻蠻滿蟎矕曼鄤僈墁蔄蔓幔獌漫慢嫚槾熳澫縵鏝牤𩛲邙芒吂汒忙尨杗𥐞盳盲茫厖恾哤狵庬浝硭牻痝䓼蛖㟿鋩駹蘉㟐𠈵莽𣶈茻壾漭蟒𪁪猫毛矛茅牦旄軞酕蛑嵍髦緢氂髳蝥錨𧐟蟊𧓿卯夘茆峁泖昴蓩㧌芼皃茂眊冒耄䋃覒袤鄚帽貿媢瑁𣔺楙毷愗𤲰貌鄮瞀蝐䫉懋呅玫苺枚眉莓脄梅脢郿堳嵋猸湄媒瑂楣腜煤溦禖酶塺霉鋂徾攗𪃏蘪鶥黴𪎭每美挴浼渼媺燘黣沬妹昧䀛袂眛鬽痗寐媚煝魅韎蝞篃嚜䉋門捫璊𣯩穈𧄸們悶燜懣甿氓虻莔冡萌𧊷蒙盟𢄐甍蕄瞢鄸鄳儚㠓幪濛懞氋檬曚朦礞矇𥣛艨霿饛䰒𩦺鼆鸏䲛猛瓾黽蜢艋獴𥋝懵蠓孟𠵼夢懜㝱眯瞇𢇲冞迷䍘謎糜縻麋彌䕷𡄣獼麛㜷𪓬攠蘼爢醾鸍䥸米芈侎洣弭敉葞渳蔝䱊濔靡瀰㠧灖孊冖糸汨宓峚祕秘覓密䖑幂塓蓂幎覛蔤嘧漞滵蜜鼏冪𧜀𥉿濗幦䤉謐羃簚𤑺宀芇眠棉媔綿蝒緜檰櫋矊丏免沔眄勉㝃娩勔冕偭葂湎愐腼緬䤄鮸面㴐湣麪𥻩麵苗䖢描媌瞄杪䏚眇秒淼渺篎緲邈𪃧𢤧妙庙玅庿廟乜咪哶烕𥾝𤊾覕搣滅𡟬蔑薎幭篾懱䁾蠛衊鱴民玟旼旻岷忞珉罠琘𦳜碈痻緍錉𪂆䡻皿抿泯笢敏閔暋愍閩𤛎慜僶憫簢蠠鰵名明茗眀洺冥眳𥹆鄍溟嫇榠暝鳴銘瞑螟覭䳟酩命詺䒌𩸍謬摸𢂳嫫摹模膜麽摩橅磨糢謨嬷藦饃𨟖蘑嚩譕䯢魔劘䊳抹懡䩋末圽没𤤄茉歾殁帓帕沫陌妺枺㹮莫眜秣袜眽蛨嗼貊䬴獏漠寞靺暯瞙嘿墨瘼𩿣𩢷默縸藐貘瀎蟔鏌驀䳮礳䘃纆耱䃺牟侔恈桙眸堥鉾謀麰鴾鍪繆𪍓某𢜯氁𨡭𨢢母牡坶拇姆姥畝娒鉧踇䥈木目沐苜牧蚞毣𦱒募墓幕睦楘慕暮霂艒穆鞪㕶拏拿挐𧘽肭衲娜納捺軜豽貀蒳魶𩹾䍲孻乃奶迺嬭奈柰耐㮈㮏鼐褦螚囡男南柟䛁喃楠諵難戁赧𧹞湳腩蝻妠𦗳囊饢曩攮灢呶怓峱硇猱詉撓橈憹蟯譊鐃𠜶堖惱瑙𨱵腦淖鬧臑疒抐呐眲訥浽腇𩛞餒餧内媆腝嫩能妮尼呢泥怩郳倪猊埿婗蛪跜䝚䛏䘽蜺輗霓鯢麑齯臡你伲坭抳苨狔柅掜旎晲儞儗擬薿禰聻𩰞氼㲻昵胒𨒫逆匿𨺙堄惄睨溺愵孴嫟𣘗暱䵑誽縌膩㵫𨽦拈蔫年粘䴴鮎黏鯰涊跈輦撚碾蹍攆𪑮廿念𥮘艌娘孃釀䖆鳥䦊裊嫋蔦樢褭嬝嬲尿捏捻苶㘝㘨㚔陧臬痆涅𡸣䇣棿喦敜嵲踂槷摰篞臲錜䭃聶闑鎳孽㜸䌜蘖齧囁糵𦣀蠥囓𡿖䌰躡讘鑷顳䡾䯀钀您寧儜凝擰薴嚀獰檸㲰聹𧭈鬡鸋䗿𩕳佞甯䔭濘妞牛𩵠扭狃忸杻䏔莥紐鈕農儂噥㺜濃膿禯穠襛醲繷弄齈㝹譨羺䨲耨獳檽譳奴孥笯駑努弩砮怒傉女籹沑恧衄朒𦓖渜暖𪋯虐瘧黁那挪哪㔮儺𡛣掿搦榒𦂍諾懦懧糯塸蓲嘔甌𢿛毆膒熰櫙謳鏂鷗齵𠙶偶腢耦歐藕漚慪𤽉葩杷爬琶掱筢潖帊怕袙拍俳排徘牌𥱼簰犤派湃扳拌潘㽃攀柈般跘媻槃磐盤縏𨃟𨃞蹣蟠鎜鞶闆判沜泮盼牉胖叛畔頖鋬襻胮䏺雱滂磅𩐨鎊逄旁趽傍膀𩃎䅭螃龐抛泡脬㯱藨刨咆狍庖炮瓟袍匏跑鞄麃麅奅砲疱皰𣶐䶌礮呸胚衃㾦醅阫陪培毰裴𨛬賠𨙶沛㤄佩配旆浿霈轡噴盆葐湓匉抨泙怦恲砰烹軯硼閛漰駍磞芃朋倗弸彭棚搒蓬傰輣澎篷篣膨韸髼鬅䰃蟚蟛鵬鬔騯捧皏剻䣙碰𩸀丕批邳伾坯披苤帔狉𤿐砒𣬼秠𠜱悂翍鈚鉟鈹銔䤨髬駓劈錍魾鮍𩣚礕霹𪄆皮阰芘㓟枇岯狓毗蚍笓郫疲陴紕埤啤崥𦨭琵椑脾痺㮰蜱魮䲹篺貔鵧羆鼙蠯匹庀圮仳痞鴄擗䫌癖嚭屁萆淠揊睥辟媲㨽潎䡟僻澼嚊濞甓䊧䡶譬闢鷿偏媥犏篇翩鶣胼㛹楩楄㼐𧍲骿緶駢蹁諞𪘀片騙票剽彯嘌漂慓翲螵飄嫖瓢薸殍膘瞟篻縹醥顠皫僄瞥撇䥕嫳𤮕拼砏姘驞玭貧頻嬪𠐺蘋矉顰品牝聘俜砯娉竮頩平坪苹郱荓枰帡洴屏㻂瓶萍蚲淜蓱蛢評馮軿鮃㵗憑坡岥頗潑醱鏺婆搫鄱謈皤叵尀駊朴迫狛珀昢破哱烞粕䞟奤蒪猼魄膊𢶉𩔈剖抔垺捊掊裒錇㩠攴仆扑痡𨁏撲舖鋪鯆䲕匍葡蒱蒲酺僕墣璞濮襆鏷纀埔莆圃浦普溥𠽾樸氆蹼譜曝七妻柒栖郪倛㩻凄萋桼戚淒悽娸期欺欹㱦喰䣛傶榿僛漆慽緀㯃慼𥉐踦諆緝霋諿䫏䗩魌𧒕鏚亓𨸔𨙸祁圻芪岐忯其奇歧肵祈祇𠁭疧耆蚑蚚旂埼萁軝畦跂崎淇琪琦棋祺隑碕鬿頎𤷍愭綦蜞䅩齊旗璂錡藄鮨濝懠騏騎臍蘄鵸鶀鯕麒𩴆鬐蠐騹鰭𧰙玂麡乞𨙬芑屺企玘杞呇起豈啓婍敧棨䏿䡔綮綺𩠜气迄汔忔芞弃汽炁𨒅泣契砌咠氣訖唭葺棄湇𢜱愒䁈摖碶甈槭𨵆磧磩磜𥉻器憩蟿鼜㤉掐葜䶗𡤫卡跒㓞㓤帢洽恰𤫶𧩶髂千仟阡扦芊䇂岍汧䀒蚈釺牽雃掔鈆愆鉛僉𨝍熑慳搴𢳍遷褰謙顅縴櫏簽鵮攓騫鬝籤韆拑前虔掮揵乾鈐鉗鉆𩎖榩箝羬潛黔錢騝騚鰬灊肷淺遣嵰槏蜸膁繾譴欠芡茜俔倩嵌傔蒨塹歉綪輤槧䵖鰜羌戕斨椌腔搶蜣嗆瑲槍嶈蹡鎗鏘爿強墻薔廧彊嬙檣牆蘠襁繈鏹蹌郻搞跤鄡敲墝碻骹墽橇磽鍬繑趬蹺蹻鞽荍喬僑劁墧憔嫶橋樵礄瞧䀉翹趫譙顦巧悄愀俏峭帩殼𣺰誚撬撽鞘𠿕𢶡竅躈切癿伽茄且沏妾怯匧挈愜朅㗫緁踥篋藒鍥䌌竊侵衾欽綅嶔親駸䃢顉寴芹芩肣矜秦耹蚙捦堇琴禽雂勤靲𤚩慬擒噙䰼檎螓𥱧瘽𥎊懃鬵坅梫寢鋟螼沁菣撳瀙顩青卿頃圊清傾輕蜻鯖𨆪鑋剠勍殑情葝晴檠擎黥苘廎請謦凊靘慶磬罄𨥲銎邛穹筇蛩蛬𠌖舼惸跫煢瞏窮璚橩𦩺藑瓊藭𥳎㑋丘邱秋蚯萩楸篍緧䠓鞦鞧鶖鰍鰌仇厹艽囚犰朹求虬泅䊵㐜俅䜪觓訄酋逑逎釚紌球梂毬崷遒湭渞㥢裘蛷絿賕觩璆蝤銶鼽鯄鰽糗曲佉阹抾屈胠祛袪區蛆䖦紶蛐詘趍𧌑嶇㠊誳𨧱魼趨麯軀麴黢驅鰸鱋劬朐蚼渠絇軥𥓼蕖璖磲鴝璩瞿鼩灈欋氍籧臞癯蠷衢𧾱躣鑺鸜𩇐取竘娶詓𡟥蝺齲去呿㰦耝趣麮闃鼁覷覰覻弮悛棬腃駩鐉全佺卷荃泉牷拳埢啳痊惓婘𡺟筌絟瑔輇跧詮觠蜷銓踡縓謜鬈㩲巏鰁權齤蠸顴犬畎綣虇券勸缺瘸卻埆崅㹱雀硞确搉皵碏榷趞慤確䧿㲉闋闕礐鵲㰌𥗙囷𢓭逡輑峮裙群𤸷呥肰袇䑙袡蚺然髯燃繎𪚮冉苒姌𠱞染橪儴蘘獽瀼禳穰瓤𧟄鑲鬤壤攘嚷䑋纕躟懹讓蕘襓饒嬈擾遶繞喏惹熱人壬仁任魜銋鵀𩷀忍荏𠲏栣腍稔綛刃仞牣妊衽紉軔恁訒紝飪韌認扔仍艿礽陾芿日馹戎肜茙茸狨毧容傛絨㲨蓉溶瑢榕榮熔褣髶駥融嶸鎔瀜蠑冗軵𣯍䢇氄柔揉葇瑈蝚糅輮蹂鍒鞣鰇鶔煣肉如侞茹帤袽䋈蒘蕠𠟺儒薷嚅濡孺嬬鴽𩶯襦蠕醹顬䰰汝乳辱鄏擩𪑾入洳蓐嗕溽褥縟堧撋瓀阮耎軟䓴𦶇㮕㼱蝡緛緌蕤䬐蕊芮汭枘蚋䓲瑞睿鋭䏰閏潤挼若鄀偌弱渃楉蒻箬篛爇鰙洒靸撒潵灑卅鈒馺摋颯𠎷𢶍薩𥻦㽂𩐅𢕬揌毸腮塞䚡䰄鰓㘔僿賽簺三𢁘叁毿鬖傘䊉糝饊俕散桑搡嗓磉䡦顙喪搔溞慅㺑㺐繅颾騷埽掃嫂瘙氉臊矂色雭瑟嗇㒊璱澀穡繬轖譅飋森槮僧鬙沙砂唦殺粆紗㲚痧硰煞裟榝䤬鎩鯊啥傻𧫝哈萐啑唼厦嗄歃翜箑翣霎㬠簁𦃏閷曬山彡𣬛芟杉删苫㹪衫姗珊挻舢脠痁笘跚搧煔煽潸襂縿羶陝閃㨛睒㴸摻汕疝赸訕扇掞釤善鄯墠墡擅樿膳禪嬗繕蟺騸贍灗鱔商傷禓墒滳殤觴鬺晌賞上尚蠰捎莦弰梢稍䘯蛸筲艄旓蕱燒髾䈾鮹勺芍杓玿韶少邵劭哨袑䏴紹睄𧣪奢猞畲賒檨舌佘蛇揲捨社舍厙射涉赦設摵蔎慴騇韘攝麝灄懾欇申扟屾伸身呻侁罙珅柛㑗胂籸姺莘眒峷甡娠深參紳兟㾕詵幓駪㜪燊神邥沈弞哂矧淰魫諗審曋瞫瀋嬸㰂甚脤葚腎蜃罧慎滲鋠瘮𩷩升生昇牲陞笙甥鉎聲鼪澠憴繩譝眚渻㾪㞼晟剩勝聖嵊蕂賸𥫽尸失邿呞虱施屍師絁葹蓍蒒獅詩溼溮鳲篩褷鍦䌤鰤襹釃𪓿十什石拾食祏時湜寔塒榯蝕實鼫識鰣𧄹史矢豕使始屎駛𩢲士氏示世仕市式𤜣𢗗事侍拭柿是眂恃室逝栻舐視貰弑勢蒔軾睗嗜筮飾試誓適褆奭噬諟澨螫謚𡣪釋襫收手守首受狩授㖟售㥅壽瘦綬獸殳疋抒叔俆姝殊倏書紓菽梳鄃淑舒疏毹綀蔬樞輸攄儵䨹秫孰塾熟贖暑黍署蜀鼠薯曙癙籔戍束述沭荗恕術庶隃尌裋竪鉥腧墅漱豎數澍樹刷耍摔甩帥率蟀拴閂栓涮腨踹双霜雙孀䉶艭驦鸘爽塽鷞㦼脽誰水㽷帨𨓚涚税裞睡吮楯眴順舜蕣瞤瞬鬊説妁𠲿朔矟搠蒴碩槊箾爍鑠厶司㺨私㟃思虒菥斯愢絲㴲禗蜤榹厮罳凘禠䔮磃嘶𥯨澌緦螄𧝤蟖颸鼶鷥死巳四寺似汜兕伺祀姒杫泗㭒柶牭俟肂涘耜笥釲竢肆嗣飼𪊍駟蕼㣈騃儩瀃松娀倯凇菘崧淞嵩蜙𩃭𪀚鬆悚竦傱愯慫駷聳㩳𡾼𢥠宋送訟頌誦鄋搜蒐獀廋㮴螋艘醙鎪餿䐹颼騪鏉䱸叟㟬溲瞍嗾擻藪櫢嗽瘶卹甦酥窣蘇俗玊夙㑛素莤速涑梀宿粟傃訴嗉塑遡溯愫肅趚蔌遬膆觫愬樕樎餗𦌉潚𦃩橚簌𠐍䑿謖䃤蹜驌鱐鷫狻痠酸匴篹蒜筭算荽荾睢滖濉雖䪎綏隨瀡髓㒸祟遂碎歲睟隧𡑞賥誶璲檖燧穗穟邃襚繀旞𤑾繐鐩孫飧搎蓀猻薞𧎤笋隼筍損榫䐣箰𦠆簨潠挱莏莎唆衰娑𢘿㛗桫傞挲蓑䔋嗦嗍趖簑髿縮鮻所索惢𢱢嗩𡩡瑣鎖𩌈鏁些逤溹他它她趿塌塔墖㗳𨶀獺鰨沓狧㧺𠴲涾㭼嗒搨𣯈遢遝𣯚榻𣗶毾𧌏𦑇𦧟漯䎓撻踏誻澾𦿚㯓嚃𣯾䑽錔𦑶䌈鞜𣝋蹋濌濕鞳闒䶀𩌇蹹闥䵬譶躢胎𧉟邰抬苔炲炱菭跆臺箈颱駘䈚儓鮐𨐠擡薹檯斄籉㘆太汰忲泰㑷溙態坍舑貪痑𣶞嘽𦧴攤灘癱胆倓郯惔覃㽎痰𨝸墰蕁談潭憛壇橝曇錟餤檀藫罈𧽼壜𧂇醰䉡貚譚𤮦譠罎忐坦袒菼毯㲜嗿緂賧醓璮襢𨅍炭探傝湠嘆䗊舕撢歎㶒𦳝湯嘡蝪薚𨲗鏜鞺鼞唐堂棠䧜塘搪䣘溏瑭榶煻磄𤛋膛螗篖糖赯螳鎕餹闛帑倘偒躺鎲儻𡿓戃曭𣎲爣矘鐋叨弢掏絛搯幍滔慆瑫槄縧縚謟濤燾饀韜饕匋迯咷逃洮桃陶萄啕淘鞀蜪綯鞉醄駣錭𩛽騊鼗討套脦忑忒貣特犆慝螣蟘熥疼幐滕邆縢謄藤儯𦅌騰籐鰧𩺭剔梯踢鷉荑厗提啼罤崹稊遆媞瑅𧋘嗁綈蕛蝭銻緹蹄鴺蹏謕題鮷鵜騠𪂿鯷䱱鶙鷤躰醍體达奃屉剃洟倜逖涕悌掦逷悐惕屜替揥𡲕殢𥉉𥉈薙鬀嚏瓋𩮜籊趯天添酟𦧝𪎾田佃沺盷畋恬菾甜湉填搷嗔鈿𨌈䡘磌窴闐䥖鷏忝殄娗蚕淟㥏腆痶舔餂覥靦㐁掭㮇瑱睼𦧡舚佻庣恌祧𣂀𥜔芀苕岹岧迢祒條笤蓚䖺蓨蜩髫鋚鞗調鯈䱔齠鰷挑朓窕誂窱眺跳覜糶怗聑貼跕蛈銕鐵䥫驖呫帖飻餮艼汀町耓桯綎䩠鞓聽廳廷莛㹶亭庭停蜓嵉𡺣筳渟婷楟霆蝏𧶺䱓鼮𩹇侹挺珽梃脡烶艇𨁗誔頲恫通痌蓪仝同佟彤侗茼哃峒狪桐烔硐秱㼧𦨴童赨酮僮銅潼曈犝朣氃瞳䳋罿穜鮦𦏆䴀垌捅桶筒統筩衕痛慟偷鍮亠投𡷠骰緰頭㳆妵紏黈𪌘𩜶透綉凸秃怢突葖嶀㻬𦩤鵚鼵䣄捈荼徒途庩涂悇梌屠揬稌蒤筡嵞腯瘏塗酴跿圖廜潳𧛗䩣䤅䖘駼鵌鶟鷋土吐兔堍菟鵵湍煓貒䵎剸摶團漙慱槫𧐕篿糰鷒鱄鷻𪆃疃彖瘓褖推𡲾蓷㞜藬隤頽頺魋㿉𧝋蘈蹪穨㿗俀㞂脮腿僓骽退𨓆娧蜕駾吞涒啍焞暾黗𧑒䵍坉芚囤忳軘豘豚飩魨臀氽㖔褪仛托佗拖拕咃侂沰侻捝莌託袥飥脱馲魠𩧐陁陀岮沱𦚐砣𡹬紽堶𨠑酡跎詑馱碢鉈駞駝橐𩃱鴕鮀鼧驒𧕛𪓽鼉妥㟎庹隋媠撱橢柝毤唾涶跅毻蘀𣟄籜穵挖哇洼窊媧蛙嗗溛窪鼃娃瓦𠩅𤬦䍪𥿉嗢膃𦤙襪韈韤咼歪喎竵外剜帵婠蜿豌㘤潫彎灣䘎丸刓芄汍抏园岏忨完玩紈捖烷頑翫𡕢宛㼝挽莞盌菀晚脘䖤惋婉琬椀晼皖碗畹輓綰踠万捥脕萬腕睕𢯲輐薍錽蟃䯛𩆊尢尣尫尪汪㑌尩亡王莣蚟网抂枉罔徃往䒽菵𣶂惘棢暀蛧蝄網輞誷魍瀇妄迋忘旺望危威𢼸倭烓逶偎隈葳崴㟪嵔渨溾楲椳微煨㕒蝛䋿薇𧤖巍鰃囗圩峗峞洈韋桅唯帷惟琟嵬幃圍爲湋違蓶鄬維𡼱潿潙闈鮠濰癓犩芛尾委洧娓萎硊崣偉痏隗葦㞇𣨙㟴骫猥愇瑋椲暐腲痿煒䔺碨磈蜲僞蔿𥯤頠諉寪緯薳𦾛䵋䃬鮪壝韙瀢𩘚韡䦱亹斖未位味畏胃軎菋尉喂猬渭㥜媦𦝩煟蔚蜼熭磑蝟衛𣽴熨慰璏罻鮇謂懀瞶魏餵螱褽轊𨎥霨𪂄鏏䗽𥶽躗讆䲁𧕈𥁕塭殟㬈溫榲瘟薀豱轀鰮文芠彣炆蚊蚉紋𧊈雯馼聞魰鳼螡闅鼤蟁䘇刎抆吻紊㖧脗䦟穩汶問搵絻顐璺翁嗡螉䈵䩺鶲䱵奣塕蓊滃暡瓮甕齆萵猧㹻渦涹喔窩䆧蝸踒我婐婑𩭏沃臥𣵽捾偓握幄渥腛斡擭瓁馧齷圬污杇巫於洿屋烏𥁡窏剭鄔嗚歍誣鴮鎢鰞无毋吾吳郚俉莁峿𢓲㹳浯珸㻍梧牾無蜈𦨼蕪璑鵐蟱䉑𩶭鼯五午伍仵迕忤武侮捂啎珷𢜮摀碔舞𩵱廡潕憮嫵甒儛鵡兀勿戊㐳阢扤屼伆芴杌岉沕矹旿物卼逜悟悞務晤焐隖婺塢𡺱誤寤噁鋈窹鼿霧蘁騖鶩夕兮扱西吸㕧汐忚扸吚希昔析肸肹穸怸俙恓莃唏息𢙅奚狶浠悕娭晞欷悉猎烯淅惜晰睎稀傒鄎翖翕腊粞焬犀蒠媐皙徯溪裼㜎熙榽豨蜥㗩僖誒熄緆撕嘻噏膝瘜潝嬉熹㯕橀樨螅螇錫歙羲熺熻窸豯蹊蟋䶋貕谿㘊鵗𥼤醯𡾞譆曦巇酅犧爔觽鼷蠵鸂纗觿鑴郋席習蒵蓆媳覡嶍槢薂隰檄䒁謵霫騱鰼襲𪄶驨洗枲徙喜葸葈𤟧蓰漇屣憘憙暿諰禧壐謑縰蹝蟢璽矖纚躧卌系呬郄怬盻咥係郤𣳦欯釳細舄隙赩禊綌熂蕮覤潟黖磶戲鬩虩餼繫闟嚱𤄎霼衋屭呀岈呷谺傄颬煆瞎蝦㗿𧯋鰕匣狎柙俠陜峽狹祫陿硤遐瑕搳暇舝碬𦾏蕸磍赮魻轄霞鍜黠䪗騢鶷下昰夏𧏡罅仙仚先忺苮杴秈祆籼掀嘕僊銛暹鍁憸韱鮮攕孅鶱躚襳纖𨇤鱻伭㳄弦咸胘涎蚿舷絃閑蛝啣嗛衘慊嫌銜撏賢𧍧稴誸澖憪嫻醎𣊺𠾑諴癇藖䕭礥鹹麙鷴䲗毨筅尠尟跣禒㬎銑箲險嶮獫獮燹幰蘚㶍𢥌䘆韅顯㒨灦臽限莧峴㪇涀陷現硍晛睍蜆腺羨僩綫撊䨘鋧線橺錎餡憲壏豏䭑譀䱤瀗霰獻鏾䃸鼸香啌鄉葙廂湘薌箱膷緗襄忀瓖欀驤瓨庠栙祥翔䜶詳享想餉蠁鯗饗響饟向巷相珦象項㟟缿衖像閧𤩪橡曏襐蟓嚮䦳鱌枵侾逍𡷸烋虓庨消宵唬梟猇萷硣硝翛痚痟窙揱綃踃嘐㺒歊霄嘵銷獟獢憢蕭鴞魈膮藃髇簫瀟櫹囂髐驍蠨毊䖀洨崤淆㮁殽誵小筱𩵖曉謏孝肖咲恔哮笑效涍詨皛㔅嘯斆猲楔歇蝎叶邪旪劦協頁𠗉恊挾衺脅偕斜絜揳嗋愶𨁂膎熁頡鞋緳勰諧擷𤢺鞵襭攜𢥘纈𪕯龤寫灺泄卸洩娎㳦屑屓械禼偰偞紲渫屟媟絏絬僁㣯㴬榭榍褉屧緤薤薢韰嶰獬邂廨澥懈謝燮褻𪌯瀉齘蟹瀣齛𪍛齥躠䪥躞心芯辛忻昕欣炘訢焮新歆鋅廞薪噷馨鑫枔鐔伈囟𤜢信衅𧗹舋釁星胜猩惺㙚蛵腥篂𦂅興騂觲鯹刑邢形侀型䣆𡶭洐陘𡷨娙硎鈃鉶滎鋞餳省箵醒擤杏幸性姓荇倖涬悻婞凶兄芎兇匈洶恟胸詾雄熊詗夐休咻修庥脩羞脙貅髹鵂饈鱃飍朽滫糔秀岫珛臭袖琇嗅銹螑繡鏽齅蓿戌吁旴䏏盱砉欨胥訏虚揟須欻頊楈墟需嘘魆蕦歔蝑𢄼嬃諝𩓣𧴆𦄼魖繻驉鬚鑐徐呴姁珝栩冔偦許蛡喣湑詡鄦稰糈醑旭序㜿侐怴㐨昫洫恤珬垿殈掝酗勖敘壻䣱訹絮婿蓄煦慉窢瞁盢漵緒獝𩣊藇藚䱛續鱮亘宣軒晅弲揎萱喧瑄暄煊䁔蝖儇鋗禤諼諠懁駽矎蠉翾玄玹痃旋蜁漩嫙璇暶縣䁢䗠懸咺烜㾌暅選㿅䠣癬泫昡炫眩袨琄衒渲絢楥鉉蔙鞙縼䍻繏鏇讂贙削靴薛穴㿱踅壆嶨學䱑㶅觷鷽雪血吷狘𥄴𥅧䎀趐謔瞲𤀰𩌊焄勛塤熏勳壎薰獯曛臐矄纁醺旬巡郇荀峋洵恂紃珣栒䘩循尋詢鄩潯樳攳燂燖蟳鱏汛迅侚徇迿狥殉訓訊梭巽馴遜䭀蕈噀顨丫押㳌𠜲䆘孲椏䃁厭鴉鴨錏壓牙伢㧎芽厓疨琊蚜崖涯釾睚衙齖𤴓庌掗啞雅瘂圠迓亞軋砑𨹝埡𡸗訝婭揠𡇼䰲猰圔𥏝稏窫䝟䦪齾咽珚胭烟焉崦淹㤿腌湮鄢煙漹嫣醃閹閼懨黫延言妍郔炎沿埏莚研唌狿狠趼蜒筵綖䇾碞𧎘虤閻檐䗡顔壛嚴㶄㘖巖鹽广沇奄匽衍弇兗剡掩郾𨟹眼偃酓𤟇琰𦳆棪嵃𧊔渰渷扊隒罨䅖裺演褗蝘戭噞嬐縯檿𥜒厴鶠齞甗黤鰋龑黬黭儼䌪魘曮巘鼹齴黶彦晏唁俺這烻宴堰硯雁猒喭焰焱傿鴈燕鬳燄諺曕鴳騐酀贋嚥艶嬿騴醶曣爓鷃灔驗饜讌驠釅讞央抰咉泱姎殃胦秧𧲱雵鉠鞅鴦䱀𪓛羊佯垟昜㟅徉𦍕洋烊痒陽揚崵瑒楊敭暘䖹䁑瘍鍚鴹颺鸉仰佒坱岟柍䍩紻軮蛘養懩癢怏恙羕詇㺊煬漾駚樣瀁幺夭吆妖殀祅要訞葽喓腰䙅邀爻肴垚姚珧倄烑窑堯軺傜摇䔄𡺯徭遥猺媱瑶榣僥銚嶢繇謡颻蘨顤鰩杳狕咬㝔眑舀窅窈偠婹溔䁏䁘䴠䯚鴢嚙騕鷕怮穾袎窔葯筄愮靿覞𧇠𪖐藥曜𦡱燿矅耀鷂𤄶枒倻椰暍噎䭇蠮耶揶㖿爺歋擨也冶野𡐨曳抴夜拽枼𤝱掖焆液葉殗喝腋楪業䁆曄僷燁鄴瞱皣嶪餣謁擫嚈鍱饁䱒䊦鵺靨一伊衣依咿洢陭猗郼揖壹椅蛜㥋禕嫛漪瑿噫繄檹醫黟譩鷖黳匜㐌台圯夷沂坨侇狋沶怡宜衪䧅柂咦峓㹫𤝻迻恞姨瓵巸桋栘胰訑宧扅㺿𧉮移𦚟痍貽蛦詒羠椸暆跠飴誃溰疑遺儀頤螔嶷簃鮧䱌謻彝鏔觺㰘鸃乙已以迆苡佁攺矣苢迤酏倚扆偯崺鳦旖輢螘嶬檥䭲礒蟻顗艤轙齮乂弋刈仡肊芅屹亦异㚤抑耴杙医邑佚役枍呭易呹秇佾㑊疙泆㣇枻俋弈奕帟疫衵羿挹䓈栧貤唈㑥垼益浥悒袣袘埸埶殹隿異釴逸翊羛翌軼殔敡跇鈠詍焲㴔湙亄嗌睪䵝𣎅肄詣裛痬裔意義溢靾勩䴬蜴膉㥷廙潩嫕㙪撎䭿黓億誼瘞毅熠熤䢃墿薏瞖殪曀螠㘁嶧圛穓劓艗𣚘㵝澺懌憶縊檍翳曎㘈斁臆燡寱翼藝藙鎰癔豷霬鶃繹繶蘙醳醷饐譯議瀷鷊囈鷁懿驛鷧襼虉鷾齸因茵垔音洇姻欭氤殷陰裀陻堙喑愔絪蔭歅溵禋䃌慇鞇緸駰𩃬諲闉濦㶏冘乑㶣吟垠泿訔圁狺峾崟淫寅鄞銀夤㙬殥誾𦟘蟫嚚霪齗䖜齦鷣尹引听䏖蚓鈏飲靷朄磤隱螾嶾濥蘟櫽䌥癮讔印胤垽堷酳窨癊憖䤃鮣檼英渶媖瑛煐䧹嫈賏霙褮嬰膺應韺鎣攖蘡罌嚶𤣎瓔櫻譻鶯蠳纓鷹鸚迎盈楹塋熒瑩䁝嬴螢營縈謍濚濴濙瀅蠅瀛瀯瀠㜲贏𧭓𧕍籯郢浧梬影潁頴穎巊廮瀴癭映硬媵𡄖譍䙬鱦䵴喲邕庸嗈傭鄘雍㴩墉㺎滽慵嫞槦𤛑擁蕹噰郺壅澭臃㻾雝鏞廱鱅鷛饔癰𪇉喁䗤顒永甬咏泳栐俑勇埇涌悀恿蛹嵱㷏踊禜醟用攸呦泑幽悠麀滺憂鄾優嚘瀀櫌耰纋尤由㽕沋𣏞𣧗肬油疣莜逌峳郵䍃庮浟蚰訧猶㾞遊游楢䖻猷蕕蝣魷輶㒡友有酉卣羑莠蚴䅎蜏䬀槱牖䱂䳑黝懮又右幼佑侑狖柚哊囿宥祐釉貁酭誘褎鼬迂扜陓虶紆菸唹淤瘀箊于邘伃玗杅余妤盂臾竽舁俞狳娛萸雩釪魚㳛隅堣堬揄楰嵎嵛骬畬逾腴湡渝㥥愉媮瑜榆虞愚𤚎牏艅㼶歈䔡䃋睮漁窬褕蕍歶𧍪蝓餘諛羭踰覦澞璵𨵦輿歟鍝螸髃䬔謣騟籅旟鰅鸆予宇羽雨俁禹圄祤敔圉偊鄅庾萭萮斞㺄瑀楀與傴㒁瘐語噢㒜鋙窳頨噳嶼貐懙麌蘌齬玉芋聿灹忬㧒郁育禺昱栯彧砡峪浴域堉唷悆欲淢淯惐琙馭棫棜遇喻御飫寓裕矞䋖蒮罭稢鈺愈䫻煜預戫蜮蜟毓獄瘉隩嫗緎鳿𧶠薁鋊澳遹豫蕷𢒰閾鴥錥諭燠燏澦儥禦醧䉛篽礜鵒䬑𦒑繘櫲饇蘛霱轝譽𩘻驈籞鱊鷸鸒𪋮鬱籲灪囦㠾眢悁冤涴㾓淵惌蒬裷鳶蜵鴛鵷嬽鼘元邧芫沅杬垣爰袁原蚖員㘣援䬧猨湲塬蒝園圓猿源嫄榬榞蝝魭緣螈圜𥰟羱黿轅櫞邍騵鶢遠苑妴怨院掾傆媛瑗蜎愿褑䬼噮願曰約噦月戉刖抈礿玥岳軏蚏悦跀䋐越粤䋤鉞㹊閲樂樾篗嶽龠𡽺𧑅蘥黦瀹躍爚禴籥䠯𨷲鑰鸑鸙㚃蒕氳熅奫蝹頵贇云匀䢵伝芸沄妘昀畇耘紜雲鄖筠溳𧶊熉鋆蕓澐橒篔縜允抎夽狁荺鈗隕馻殞霣齳孕鄆惲運暈慍䲰緷縕醞餫𣎜韞韗蘊韻帀匝咂拶紮鉔臢咱砸磼𡁕雜囋囐雥災哉栽渽宰崽䏁再在載酨縡撍糌䐶簪鐕喒昝桚寁揝儹趲暫蹔鏨贊酇瓚饡䍧牂臧贓駔髒奘葬臟傮遭㷮糟醩鑿早蚤棗璅澡璪藻繰皂唣造慥噪簉燥趮躁竈咋迮泎則責㟙笮舴飵溭滜嘖幘㥽嫧䯔擇皟澤簀賾礋襗蠌齰鸅䶦仄昃崱賊蠈鰂怎譖曾鄫增憎璔橧熷磳罾矰䎖繒譄鋥甑贈䰝𪒟扎抯挓柤奓哳揸渣楂劄樝觰皻譇齇䶥札炸蚻閘煠鍘厏眨㴙㞚鮓䕢乍吒栅咤痄蚱䆛䋏䖳詐溠䄍槎榨蜡霅醡摘榸齋宅檡抧窄債寨瘵占沾栴旃蛅飦詀詹薝霑噡邅氈瞻旜譫饘驙鱣鸇展斬搌盞嶄颭䎒䁪輾站偡䋎棧湛䘺䗃綻嶘虦戰轏𩥇驏蘸顫章張傽鄣蔁獐彰粻漳慞嫜璋樟餦仉掌漲丈仗扙杖帳脹障嶂幛賬瞕瘴招昭盄釗朝鉊皽爪找沼瑵召兆垗狣笊㨄棹詔旐䍮照罩趙肇曌鮡㸙蜇遮折虴籷哲㭙晢悊䇽䐑摺輒磔銸䐲蟄鮿謫轍讋襵者赭褶柘浙蔗蟅鷓嗻㘰珍貞真砧䂦帪針偵葴幀湞蓁斟椹楨甄獉溱禎瑧榛禛箴潧薽臻轃鍼籈抮枕昣胗眕畛疹袗紾軫診裖䪴駗稹縝辴鬒黰圳挋侲陣振栚朕紖眹揕絼榐賑震鴆鎮䳲佂征爭怔𦙫炡眐脀烝崝崢猙䋫蒸睜鉦箏錚趟徵鬇癥拯晸整正政症掙証諍䦛鄭䈣證之支汁芝吱巵枝知肢胝㽻衼祗栺隻脂㩼梔䧴搘禔馶榰蜘鳷織蘵鼅拓直侄姪值埴㨁執植殖跖䐈禃稙鉄墌摭慹樴膱㙷縶職蹠蹢蟙躑䵂止只旨阯址坁扺芷沚汦茋𣲵祉指枳砋洔恉衹咫疻紙趾軹黹䳅𧝉阤至志豸忮垁迣厔郅帙制炙治挃柣峙庤庢祑陟桎致歭晊秩狾楖畤秷偫𠋤猘袠痔窒䘭翐紩蛭智痣彘㨖輊跱置雉稚廌滍寘疐製銍誌瘈滯摯幟質鋕潪駤㘉㿃瀄緻擿擲櫛䚦懥贄䦯懫瓆櫍䱥觶騭礩鷙躓鑕中伀彸忪妐忠柊盅衳衷終蔠蝩鍾螽鼨鐘籦冢尰腫種瘇踵仲重衶蚛偅衆𢝆䱰碡舟州侜周洲郮䓟啁婤喌粥輈銂輖賙盩謅譸鬻妯棸軸肘疛帚晭睭𧳜鯞伷咒宙胄冑咮紂酎晝㑳䛆甃㥮䩜㾭駎䈙僽皺噣縐籀驟朱邾侏茱洙珠株硃猪袾蛛絑跦誅蝫銖豬諸鴸藷瀦櫧櫫鼄䃴蠩朮竹𦬸竺泏茿逐窋舳瘃薥燭蠋躅鱁劚鸀灟欘斸蠾钃主拄枓砫䘢陼渚煮詝褚麈𪐴屬囑䰞矚宁芧助住佇坾苧杼注泞壴柷柱殶炷祝莇眝疰祩著蛀羜紸紵貯跓嵀筑馵筯鉒翥箸䐢駐霔築麆鑄抓撾檛髽專鄟塼嫥膞磚諯蟤顓竱轉堟瑑腞僝僎撰篆賺襈譔饌囀籑庄妝莊裝樁壯狀漴撞獞戅戇隹追萑錐騅鵻沝隊甀惴硾畷膇墜綴醊諈縋錣餟贅轛屯迍肫盹窀訰諄衠准埻準綧稕拙捉桌倬棁涿棳蝃䪼穛𥼚犳汋灼茁卓斫酌浞㧻啄啅着琢琸斮椓晫焯窡禚斲䅵鋜諑𧨳䶂濁擢濯櫡鵫鐯繳蠗灂鐲籗鷟蠿仔孖孜甾㠿咨姿兹䊷玆菑淄椔䖪嗞嵫粢孳滋趑貲觜資鈭緇鼒輜髭趦錙澬鎡䆅鯔齍鶅鰦𪗋齜子姊胏耔㧗茈呰虸秭籽笫梓釨紫訾滓𦞤芓自字㧘牸倳恣眦胾胔漬宗㚇倧堫葼棕嵕嵏猣惾朡㙡稯䑸綜踪蝬翪緵䗥鬃豵蹤鬷鯼𪖁偬蓯䁓總粽錝瘲縱陬掫菆棷鄒緅諏鄹鯫黀騶齱齺走奏租菹蒩足卒哫崒族踤䃚鏃𣤶阻珇俎祖組䔃詛靻伹𨉖劗纂䂎籫纘攥鑽厜䘒嗺樶蟕嶊嶉槯嘴最晬罪辠蕞醉檇㠑尊嶟遵樽繜鐏鱒鷷僔撙䔿噂譐捘袸瀳苲昨㸲莋捽筰左佐㝾繓作坐阼岞岝怍柞侳胙祚砟座做葃葄酢糳" + +function setfromstr(str) + local t = {} + for p, c in utf8.codes(str) do + t[utf8.char(c)] = true + end + return t +end + +local charset = setfromstr(str) + +function issubset(candidate, charset) + for el, _ in pairs(candidate) do + if not charset[el] then + return false + end + end + return true +end + +local function yuhao_tc_first(input, env) + local b = env.engine.context:get_option("yuhao_tc_first") + local l = {} + local length_of_input = string.len(env.engine.context.input) + for cand in input:iter() do + local candidate = setfromstr(cand.text) + if (not b or issubset(candidate, charset) or (length_of_input < 4)) then + yield(cand) + else + table.insert(l, cand) + end + end + -- 非常用字词后置 + for i, cand in ipairs(l) do + yield(cand) + end +end + +return yuhao_tc_first diff --git a/beta/hotfix/lua/yuhao/yuhao_tw_first.lua b/beta/hotfix/lua/yuhao/yuhao_tw_first.lua new file mode 100644 index 0000000..74e11a2 --- /dev/null +++ b/beta/hotfix/lua/yuhao/yuhao_tw_first.lua @@ -0,0 +1,64 @@ +-- Name: yuhao_tw_first.lua +-- 名称: 臺灣傳統字前置 +-- Version: 20230918 +-- Author: forFudan 朱宇浩 +-- Github: https://github.com/forFudan/ +-- 版權聲明: +-- 專爲宇浩輸入法製作 +-- 轉載請保留作者名和出處 +-- Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International +--------------------------------------- +-- +-- 介紹: +-- 將候選中的臺灣傳統字前置 +-- 《常用國字》中的4808字 +-- +-- Description: +-- Prioritize Tranditional Chinese characters +-- +-- 版本: +-- 20230918: 初版 + +--------------------------- + +local str = +"一丁七三下丈上丑丐不丙世丕且丘丞丟並丫中串丸凡丹主乃久么之尹乍乏乎乒乓乖乘乙九也乞乩乳乾亂了予事二于云井互五亙些亞亟亡交亦亥亨享京亭亮人仁什仃仆仇仍今介仄以付仔仕他仗代令仙仞仿伉伙伊伕伍伐休伏仲件任仰仳份企位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣作你伯低伶余佝佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉偺偽停假偃偌做偉健偶偎偕偵側偷偏倏傢傍傅備傑傀傖傘傭債傲傳僅傾催傷傻傯僧僮僥僖僭僚僕像僑僱億儀僻僵價儂儈儉儒儘儔儐優償儡儲儷儼兀元允充兄光兇兆先兌克兕免兔兒兗兜兢入內全兩八六兮公共兵具其典兼冀冉冊再冒冑冕最冗冠冤冥冢冬冰冶冷冽凍凌准凋凜凝几凰凱凳凶凹出凸函刀刁刃分切刈刊列刑划刎別判利刪刨刻券刷刺到刮制剁剎剃削前剌剋則剖剜剔剛剝剪副割剴創剩剿剷剽劃劇劈劉劍劑力加功劣劫助努劬劾勇勉勃勁勒務勘動勞勝勛募勦勤勢勵勸勻勾勿包匆匈匍匐匏匕化北匙匝匡匠匣匪匯匱匹匿區匾十千午升卅仟半卉卒協卓卑南博卜卞卡占卦卯卮印危即卵卷卸卹卻卿厄厚原厝厥厭厲去參又叉友及反取叔受叛叟曼叢口可古右召叮叩叨叼司叵叫另只史叱台句叭吉吏同吊吐吁吋各向名合吃后吆吒吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟味呵咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎咬哀咨哎哉咸咦咳哇哂咽咪品哄哈咯咫咱咻哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪哦唧商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘮嘻嘹嘲嘿嘩噓噎噗噴嘶嘯嘰噙噫噹噩噤噸嘴噪器噥噱噯噬噢嚎嚀嚐嚅嚇嚏嚕嚮嚥嚨嚷嚶嚴嚼囁囀囂囈囊囉囌囑四囚因回囪困囤固圃圈國圍園圓團圖土圳地在圭圬圯坊坑址坍均坎圾坐坏垃坷坪坩坡坦坤坼垂型垠垣垢城垮埂埔埋埃域堅堊堆埠埤基堂堵執培堯堪場堤堰報堡塞塑塘塗塚塔填塌塭塊塢塵塾境墓墊塹墅墀墟增墳墜墮壁墾壇壅壕壓壑壙壘壞壟壢壤壩士壬壯壹壺壽夏夔夕外夙多夜夠夥夢夤大天夫太夭央失夷夸夾奉奇奈奄奔奕契奏奎奐套奘奚奢奠奧奪奩奮女奴奶妄奸妃好她如妁妝妒妨妞妣妙妖妍妤妓妊妥妾妻委妹妮姑姆姐姍始姓姊妯妳姒姜姘姿姣姨娃姥姪姚姦威姻娑娘娜娟娛娓姬娠娣娩娥娌娶婁婉婦婪婀娼婢婚婆婊婷媚婿媒媛嫁嫉嫌媾媽媼媳嫂媲嫡嫦嫩嫗嫖嫘嫣嬉嫻嬋嫵嬌嬝嬴嬰嬪嬤嬸孀子孑孓孔孕字存孝孜孚孟孤季孩孫孰孳孱孵學孺孽孿它宇守宅安完宋宏宗定官宜宙宛宣宦室客宥宰害家宴宮宵容宸寇寅寄寂宿密寒富寓寐寞寧寡寥實寨寢寤察寮寬審寫寵寶寸寺封射尉專將尊尋對導小少尖尚尤尬就尷尸尺尼局屁尿尾屈居屆屎屏屍屋屑展屐屠屜屢層履屬屯山屹岐岑岔岌岷岡岸岩岫岱岳峙峭峽峻峪峨峰島崁崇崆崎崛崖崢崑崩崔崙嵌嵐嵩嶄嶇嶝嶼嶺嶽巍巔巒巖川州巢工巨巧左巫差己已巳巴巷巽巾市布帆希帘帚帖帕帛帑帝帥席師常帶帳帷幅帽幀幌幛幣幕幗幔幢幟幫干平并年幸幹幻幼幽幾序庇床庚店府底庖庠度庫庭座康庸庶庵庾廊廁廂廉廈廓廖廢廚廟廝廣廠龐廬廳廷延建廿弁弄弈弊式弒弓弔引弘弗弛弟弦弧弩弭弱張強弼彆彈彌彎彗彙彝彤形彥彬彩彫彭彰影彷役往征彿彼很待徊律徇後徒徑徐得徙從徘御復循徨徬微徹德徵徽心必忙忖忘忌志忍忱快忝忠忽念忿怏怔怯怵怖怪怕怡性怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤恙恣恥恐恕恭恩息悄悟悚悍悔悌悅悖恿患悉悠您惋悴惦悽情悻悵惜悼惘惕惆惟悸惚惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愚意慈感想愛惹愁愈慎慌慄慍愾愴愧慇愿態慷慢慣慟慚慘慶慧慮慝慕憂慼慰慫慾憧憐憫憎憬憚憤憔憲憑憩憊懍憶憾懂懊懈應懇懦懣懲懷懶懵懸懺懼懾懿戀戈戊戎戌戍成戒我或戕戚戛戟戡戢截戮戰戲戴戳戶房戾所扁扇扈扉手才扎打扔扒扣扛托抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎拜挖按拼拭持拮拽指拱拷拯括拾拴挑拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨掣掌描揀揩揉揆揍插揣提握揖揭揮捶援揪換摒揚搓搾搞搪搭搽搬搏搜搔損搶搖搗撇摘摔撤摸摟摺摑摧摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬擅擁擋撻撼據擄擇擂操撿擒擔擎擊擘擠擰擦擬擱擴擲擾攆擺擻攀攏攘攔攙攝攜攤攣攫攪攬支收改攻放政故效敝敖救教敗啟敏敘敞敦敢散敬敲敵敷數整斂斃文斑斐斗料斜斟斡斤斥斧斫斬斯新斷方於施旁旅族旋旌旎旗旖既日旦早旨旬旭旱旺昔易昌昆昂明昀昏春昭映昧是星昨時晉晏晃晒晌晝晚晤晨晦普晰晴晶景暑智暗暉暇暈暖暢暨暮暫暴曆曉暹曙曖曠曝曦曰曲曳更曷書曹勗曾替會月有服朋朔朕朗望期朝朦朧木朮本未末札朽朴朱朵束李杏材村杜杖杞杉杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚榔業楚楷楠楔極椰概楊楨楫楞楓楹榆榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌樣樟槨樁樞標槽模樓樊槳樂樅樽樸樺橙橫橘樹橄橢橡橋橇樵機檀檔檄檢檜櫛檳檬櫃檻檸櫂櫥櫝櫚櫓櫻欄權欖欠次欣欲款欺欽歇歉歌歐歙歟歡止正此步武歧歪歲歷歸歹死歿殃殆殊殉殘殖殤殮殯殲段殷殺殼毀殿毅毆毋母每毒毓比毗毛毫毯毽氏民氐氓氖氛氟氣氧氨氦氤氫氮氯氳水永汁汀氾求汝汗汙江池汐汕汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊泉泰洋洲洪流津洌洱洞洗活洽派洶洛浪涕消涇浦浸海浙涓浬涉浮浚浴浩涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋溉渙溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪漳演滾漓滴漩漾漠漬漏漂漢滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘濂澱澡濃澤濁澧澳激澹濘濱濟濠濛濤濫濯澀濬濡瀉瀋濾瀆濺瀑瀏瀛瀟瀨瀚瀝瀕瀾瀰灌灑灘灣灤火灰灶灼災灸炕炎炒炊炙炫為炳炬炯炭炸炮烊烘烤烙烈烏烹焉焊烽焙焚焦焰無然煮煎煙煩煤煉照煜煬煦煌煥煞熔熙煽熊熄熟熬熱熨熾燉燐燒燈燕熹燎燙燜燃燄燧營燮燦燥燭燬燴燻爆爍爐爛爨爪爬爭爰爵父爸爹爺爻爽爾牆片版牌牒牖牘牙牛牟牝牢牡牠牧物牲牯牴特牽犁犄犀犒犖犛犢犧犬犯狄狂狀狎狙狗狐狩狠狡狼狹狽狸狷猜猛猖猓猙猶猥猴猩猷獅猿猾獄獐獎獗獨獰獲獷獵獸獺獻玀玄率王玉玖玩玨玟玫玷珊玻玲珍珀玳班琉珮珠琅琊球理現琍琺琪琳琢琥琵琶琴瑯瑚瑕瑟瑞瑁琿瑙瑛瑜瑤瑣瑪瑰瑩璋璃璜璣璩環璦璧璽瓊瓏瓜瓠瓢瓣瓦瓶瓷甄甌甕甘甚甜生產甥甦用甩甬甫甭田由甲申男甸甽畏界畔畝畜畚留略畦畢異畫番當畸疇疆疊疋疏疑疝疙疚疫疤疥疾病症疲疳疽疼疹痊痔痕疵痢痛痣痙痘痞瘀痰瘁痲痱痺痿痴瘧瘍瘋瘉瘓瘠瘩瘟瘤瘦瘡瘴瘸癆療癌癖癘癒癢癥癩癮癬癱癲癸登發白百皂的皆皇皈皎皖皓皚皮皰皴皺皿盂盈盆盃益盍盎盔盒盛盜盞盟盡監盤盧盥盪目盯盲直省盹相眉看盾盼眩真眠眨眷眾眼眶眸眺睏睛睫睦睞督睹睪睬睜睥睨瞄睽睿睡瞎瞇瞌瞑瞠瞞瞟瞥瞳瞪瞰瞬瞧瞭瞽瞿瞻矇矓矗矚矛矜矢矣知矩短矮矯石矽砂研砌砍砰砧砸砝破砷砥砭硫硃硝硬硯碎碰碗碘碌碉硼碑磁碟碧碳碩磋磅確磊碾磕碼磐磨磚磬磷磺磴磯礁礎礙礦礪礬礫示社祀祁祆祉祈祇祕祐祠祟祖神祝祗祚祥票祭祺祿禁禎福禍禦禧禪禮禱禹萬禽禾私秀禿秉科秒秋秤秣秧租秦秩移稍稈程稅稀稜稚稠稔稟種稱稿稼穀稽稷稻積穎穆穌穗穡穢穫穩穴究空穹穿突窄窈窒窕窘窗窖窟窠窪窩窯窮窺竄竅竇竊立站童竣竭端競竹竺竿竽笆笑笠笨笛第符笙笞等策筆筐筒答筍筋筏筷節筠管箕箋筵算箝箔箏箭箱範箴篆篇篁篙簑築篤篛篡篩簇簍篾篷簫簧簪簞簣簡簾簿簸簽簷籌籃籍籐籠籟籤籬籮籲米粉粒粗粟粥粱粳粵粹粽精糊糕糖糠糜糞糢糟糙糧糯糸系糾紂紅紀紉紇約紡紗紋紊素索純紐紕級紜納紙紛絆絃統紮紹紼絀細紳組累終絞結絨絕紫絮絲絡給絢經絹綑綁綏綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇締練緯緻緘緬緝編緣線緞緩綞縊縑縈縛縣縮績繆縷縲繃縫總縱繅繁織繕繞繚繡繫繭繹繩繪辮繽繼纂纏續纓纖纜缶缸缺缽罄罈罐罕罔罟置罩罪署罰罵罷罹羅羈羊羌羋美羔羞羚善義羨群羯羲羶羹羸羽羿翅翁翌翎習翔翕翠翡翟翩翰翱翳翼翹翻耀老考者耆而耐耍耒耘耕耙耗耜耳耶耽耿聊聆聖聘聞聚聱聲聰聯聳職聶聾聽聿肆肄肅肇肉肋肌肖肓肝肘肛肚育肺肥肢肱股肫肩肴肪肯胖胥胚胃胄背胡胛胎胞胤胱脂胰脅胭胴脆胸胳脈能脊脯脖脣脫脩腕腔腋腑腎脹腆脾腐腱腰腸腥腮腳腫腹腺腦膀膏膈膊腿膛膜膝膠膚膳膩膨臆臃膺臂臀膿膽臉膾臍臏臘臚臟臣臥臧臨自臭臬至致臺臻臼臾舀舂舅與興舉舊舌舍舐舒舔舛舜舞舟舢航舫舨般舵舷舶船艇艘艙艦艮良艱色艾芒芋芍芳芝芙芭芽芟芹花芬芥芻苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜蒂葷落萱葵葦葫葉葬葛萼萵葡董葩蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蕊蕙蕈蕨蕩蕃蕉蕭蕪薪薄蕾薜薑薔薯薛薇藏薩藍藐藉薰藩藝藪藕藤藥藻藹蘑藺蘆蘋蘇蘊蘗蘭蘚蘸蘿虎虐虔處彪虛虜虞號虧虫虱虹蚊蚪蚓蚤蚩蚌蚣蛇蛀蚶蛄蚵蛆蛋蚱蚯蛟蛙蛭蛔蛛蛤蛹蜓蜈蜇蜀蛾蛻蜂蜃蜿蜜蜻蜢蜥蜴蜘蝕螂蝴蝶蝠蝦蝸蝨蝙蝗蝌螃螟螞螢融蟀蟑螳蟒蟆螫螻螺蟈蟋蟯蟬蟲蟻蠅蠍蟹蠔蠕蠣蠢蠡蠟蠱蠶蠹蠻血行衍術街衙衛衝衡衢衣初表衫衰衷袁袂袞袈被袒袖袍袋裁裂袱裟裔裙補裘裝裡裊裕裳褂裴裹裸製裨褚褐複褒褓褪褲褥褫褻褶襄褸襠襟襖襤襪襲襯西要覃覆見覓規視親覦覬覲覺覽觀角解觴觸言計訂訃記訐討訌訕訊託訓訖訪訝訣訥許設訟訛註詠評詞証詁詔詛詐詆訴診詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹誦誌語誣認誡誓誤說誥誨誘誑誼諒談諄誕請諸課諉諂調誰論諍諦諺諫諱謀諜諧諮諾謁謂諷諭謎謗謙講謊謠謝謄謨謹謬譁譜識證譚譎譏議譬警譯譴護譽讀變讓讒讖讚谷豁谿豆豈豉豌豎豐豔豕豚象豢豪豬豫豺豹貂貊貉貍貌貓貝貞負財貢販責貫貨貪貧貯貼貳貽賁費賀貴買貶貿貸賊資賈賄貲賃賂賅賓賑賒賠賞賦賤賬賭賢賣賜質賴賺賽購贅贈贊贏贍贓贖贗贛赤赧赦赫赭走赴赳起越超趁趙趕趟趣趨足趴趾跎距跋跚跑跌跛跆跡跟跨路跳跺跪跼踫踐踝踢踏踩踟蹄踱踴蹂踹踵蹉蹋蹈蹊蹙蹣蹦蹤蹼蹲躇蹶蹬蹺躉躁躅躂躊躍躑躡躪身躬躲躺軀車軋軍軌軒軔軛軟軻軸軼較載軾輊輔輒輕輓輝輛輟輩輦輪輜輻輯輸轄輾轂轅輿轉轍轔轎轟轡辛辜辟辣辨辦辭辯辰辱農迂迆迅迄巡迎返近述迦迢迪迥迭迫送逆迷退迺迴逃追逅這逍通逗連速逝逐逕逞造透逢逖逛途逮逵週逸進運遊道遂達逼違遐遇遏過遍遑逾遁遠遘遜遣遙遞適遮遨遭遷遵遴選遲遼遺避遽還邁邂邀邇邊邐邏邑邕邢邪邦那邵邸邱郊郎郁郡部郭都鄂郵鄉鄒鄙鄰鄭鄧鄱鄹酉酋酊酒配酌酗酣酥酬酪酩酵酸酷醇醉醋醃醒醣醞醜醫醬醺釀釁采釉釋里重野量釐金釘針釗釜釵釦釣釧鈔鈣鈕鈉鈞鈍鈐鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉸銬銀銅銘銖鉻銓銜鋅銻銷鋪鋤鋁銳銼鋒錠錶鋸錳錯錢鋼錫錄錚錐錦鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鎔鎊鎖鎢鎳鎮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鐘鐃鏽鐮鐳鐵鐺鐸鐲鑄鑑鑒鑣鑠鑲鑰鑽鑾鑼鑿長門閂閃閉閔閏開閑間閒閘閡閨閩閣閥閤閭閱閻闊闋闌闈闆闔闖闐關闡闢阜阡防阮阱阪陀阿阻附限陋陌降院陣陡陛陝除陪陵陳陸陰陴陶陷隊階隋陽隅隆隍陲隘隔隕隙障際隧隨險隱隴隸隻雀雁雅雄雋集雇雍雉雌雕雖雜雙雛雞離難雨雪雯雲雷電雹零需霄霆震霉霎霑霖霍霓霏霜霞霪霧霸霹露霽霾靂靈靄青靖靛靜非靠靡面靦靨革靴靶靼鞅鞍鞋鞏鞘鞠鞣鞦鞭韃韁韆韋韌韓韜韭音章竟韶韻響頁頂頃項順須預頑頓頊頒頌頗領頡頰頸頻頷頭頹頤顆額顏題顎顓類願顛顧顫顯顰顱風颯颱颳颶颺颼飄飛食飢飧飪飯飩飲飭飼飴飽飾餃餅餌餉養餓餒餘餐館餞餛餡餵餾餿餽饅饒饑饜饞首香馥馨馬馮馭馳馱馴駁駝駐駟駛駑駕駒駙駭駢駱騁駿騎騖騙騫騰騷驅驃驀騾驕驚驛驗驟驢驥驪骨骯骰骷骸骼髏髒髓體高髦髮髯髻髭鬃鬆鬍鬚鬢鬥鬧鬨鬱鬲鬼魁魂魅魄魏魔魘魚魷魯鮑鮮鮫鮪鯊鯉鯽鯨鯧鰓鰍鰭鰥鱉鰱鰾鰻鱔鱗鱖鱷鱸鳥鳩鳴鳶鳳鴆鴉鴕鴣鴦鴨鴒鴛鴻鴿鵑鵝鵠鶉鵡鵲鵪鵬鶯鶴鷂鷓鷗鷥鷹鷺鸚鸞鹹鹼鹽鹿麂麋麒麗麓麝麟麥麩麴麵麻麼麾黃黍黎黏黑墨默黔點黜黝黛黠黨黯黴黷鼇鼎鼓鼕鼙鼠鼬鼴鼻鼾齊齋齒齟齣齡齜齦齬齪齷齲龍龔龜" + +function setfromstr(str) + local t = {} + for p, c in utf8.codes(str) do + t[utf8.char(c)] = true + end + return t +end + +local charset = setfromstr(str) + +function issubset(candidate, charset) + for el, _ in pairs(candidate) do + if not charset[el] then + return false + end + end + return true +end + +local function yuhao_tw_first(input, env) + local b = env.engine.context:get_option("yuhao_tw_first") + local l = {} + local length_of_input = string.len(env.engine.context.input) + for cand in input:iter() do + local candidate = setfromstr(cand.text) + if (not b or issubset(candidate, charset) or (length_of_input < 4)) then + yield(cand) + else + table.insert(l, cand) + end + end + -- 非常用字词后置 + for i, cand in ipairs(l) do + yield(cand) + end +end + +return yuhao_tw_first diff --git a/beta/schema/lua/yuhao/yuhao_chaifen_filter.lua b/beta/schema/lua/yuhao/yuhao_chaifen_filter.lua new file mode 100644 index 0000000..6b0cea5 --- /dev/null +++ b/beta/schema/lua/yuhao/yuhao_chaifen_filter.lua @@ -0,0 +1,2 @@ +local yuhao_chaifen_filter = require("yuhao.yuhao_chaifen").filter +return yuhao_chaifen_filter \ No newline at end of file diff --git a/beta/schema/lua/yuhao/yuhao_chaifen_processor.lua b/beta/schema/lua/yuhao/yuhao_chaifen_processor.lua new file mode 100644 index 0000000..e20e6db --- /dev/null +++ b/beta/schema/lua/yuhao/yuhao_chaifen_processor.lua @@ -0,0 +1,2 @@ +local yuhao_chaifen_processor = require("yuhao.yuhao_chaifen").processor +return yuhao_chaifen_processor \ No newline at end of file diff --git a/beta/schema/lua/yuhao/yuhao_char_first.lua b/beta/schema/lua/yuhao/yuhao_char_first.lua new file mode 100644 index 0000000..b4620e4 --- /dev/null +++ b/beta/schema/lua/yuhao/yuhao_char_first.lua @@ -0,0 +1,2 @@ +local yuhao_char_filter = require("yuhao.yuhao_char_filter") +return yuhao_char_filter.yuhao_char_first \ No newline at end of file diff --git a/beta/schema/lua/yuhao/yuhao_char_only.lua b/beta/schema/lua/yuhao/yuhao_char_only.lua new file mode 100644 index 0000000..42866cb --- /dev/null +++ b/beta/schema/lua/yuhao/yuhao_char_only.lua @@ -0,0 +1,2 @@ +local yuhao_char_filter = require("yuhao.yuhao_char_filter") +return yuhao_char_filter.yuhao_char_only \ No newline at end of file diff --git a/beta/schema/lua/yuhao/yuhao_switch_proc.lua b/beta/schema/lua/yuhao/yuhao_switch_proc.lua new file mode 100644 index 0000000..2b6ac2d --- /dev/null +++ b/beta/schema/lua/yuhao/yuhao_switch_proc.lua @@ -0,0 +1,2 @@ +local yuhao_switch_proc = require("yuhao.yuhao_switch").proc +return yuhao_switch_proc \ No newline at end of file diff --git a/beta/schema/lua/yuhao/yuhao_switch_tr.lua b/beta/schema/lua/yuhao/yuhao_switch_tr.lua new file mode 100644 index 0000000..78d4865 --- /dev/null +++ b/beta/schema/lua/yuhao/yuhao_switch_tr.lua @@ -0,0 +1,2 @@ +local yuhao_switch_tr = require("yuhao.yuhao_switch").tr +return yuhao_switch_tr \ No newline at end of file diff --git a/beta/schema/yuhao.schema.yaml b/beta/schema/yuhao.schema.yaml index 7ad3e86..7024e97 100644 --- a/beta/schema/yuhao.schema.yaml +++ b/beta/schema/yuhao.schema.yaml @@ -76,10 +76,10 @@ switches: engine: processors: - - lua_processor@yuhao_switch_proc@yuhao_macro + - lua_processor@*yuhao.yuhao_switch_proc@yuhao_macro - ascii_composer - recognizer - - lua_processor@yuhao_chaifen_processor + - lua_processor@*yuhao.yuhao_chaifen_processor - key_binder - speller - punctuator @@ -99,20 +99,20 @@ engine: - reverse_lookup_translator - table_translator@fixed - table_translator - - lua_translator@yuhao_helper # 幫助文檔 - - "table_translator@zaoci" # 用户造詞 - - lua_translator@yuhao_switch_tr@yuhao_macro + - lua_translator@*yuhao.yuhao_helper # 幫助文檔 + - table_translator@zaoci # 用户造詞 + - lua_translator@*yuhao.yuhao_switch_tr@yuhao_macro filters: - - lua_filter@yuhao_autocompletion_filter - - lua_filter@yuhao_single_char_only_for_full_code - - lua_filter@yuhao_char_first - - lua_filter@yuhao_char_only - - lua_filter@yuhao_sc_first - - lua_filter@yuhao_postpone_full_code + - lua_filter@*yuhao.yuhao_autocompletion_filter + - lua_filter@*yuhao.yuhao_single_char_only_for_full_code + - lua_filter@*yuhao.yuhao_char_first + - lua_filter@*yuhao.yuhao_char_only + - lua_filter@*yuhao.yuhao_sc_first + - lua_filter@*yuhao.yuhao_postpone_full_code - simplifier@traditionalize - simplifier@simplify - - lua_filter@yuhao_chaifen - - lua_filter@yuhao_embeded_cands@embeded_cands + - lua_filter@*yuhao.yuhao_chaifen_filter + - lua_filter@*yuhao.yuhao_embeded_cands@embeded_cands - uniquifier traditionalize: diff --git a/beta/schema/symbols_yuhao.yaml b/beta/schema/yuhao.symbols.yaml similarity index 100% rename from beta/schema/symbols_yuhao.yaml rename to beta/schema/yuhao.symbols.yaml diff --git a/beta/schema/yuhao_tc.schema.yaml b/beta/schema/yuhao_tc.schema.yaml index 053dfb5..28b6934 100644 --- a/beta/schema/yuhao_tc.schema.yaml +++ b/beta/schema/yuhao_tc.schema.yaml @@ -70,10 +70,10 @@ switches: engine: processors: - - lua_processor@yuhao_switch_proc@yuhao_macro + - lua_processor@*yuhao.yuhao_switch_proc@yuhao_macro - ascii_composer - recognizer - - lua_processor@yuhao_chaifen_processor + - lua_processor@*yuhao.yuhao_chaifen_processor - key_binder - speller - punctuator @@ -93,19 +93,19 @@ engine: - reverse_lookup_translator - table_translator@fixed - table_translator - - lua_translator@yuhao_helper # 幫助文檔 - - "table_translator@zaoci" # 用户造詞 - - lua_translator@yuhao_switch_tr@yuhao_macro + - lua_translator@*yuhao.yuhao_helper # 幫助文檔 + - table_translator@zaoci # 用户造詞 + - lua_translator@*yuhao.yuhao_switch_tr@yuhao_macro filters: - - lua_filter@yuhao_autocompletion_filter - - lua_filter@yuhao_single_char_only_for_full_code - - lua_filter@yuhao_char_first - - lua_filter@yuhao_char_only - - lua_filter@yuhao_tc_first - - lua_filter@yuhao_postpone_full_code + - lua_filter@*yuhao.yuhao_autocompletion_filter + - lua_filter@*yuhao.yuhao_single_char_only_for_full_code + - lua_filter@*yuhao.yuhao_char_first + - lua_filter@*yuhao.yuhao_char_only + - lua_filter@*yuhao.yuhao_tc_first + - lua_filter@*yuhao.yuhao_postpone_full_code - simplifier@simplify - - lua_filter@yuhao_chaifen - - lua_filter@yuhao_embeded_cands@embeded_cands + - lua_filter@*yuhao.yuhao_chaifen_filter + - lua_filter@*yuhao.yuhao_embeded_cands@embeded_cands - uniquifier simplify: diff --git a/beta/schema/yuhao_tw.schema.yaml b/beta/schema/yuhao_tw.schema.yaml index 75b8268..48ae432 100644 --- a/beta/schema/yuhao_tw.schema.yaml +++ b/beta/schema/yuhao_tw.schema.yaml @@ -68,10 +68,10 @@ switches: engine: processors: - - lua_processor@yuhao_switch_proc@yuhao_macro + - lua_processor@*yuhao.yuhao_switch_proc@yuhao_macro - ascii_composer - recognizer - - lua_processor@yuhao_chaifen_processor + - lua_processor@*yuhao.yuhao_chaifen_processor - key_binder - speller - punctuator @@ -91,19 +91,19 @@ engine: - reverse_lookup_translator - table_translator@fixed - table_translator - - lua_translator@yuhao_helper # 幫助文檔 - - "table_translator@zaoci" # 用户造詞 - - lua_translator@yuhao_switch_tr@yuhao_macro + - lua_translator@*yuhao.yuhao_helper # 幫助文檔 + - table_translator@zaoci # 用户造詞 + - lua_translator@*yuhao.yuhao_switch_tr@yuhao_macro filters: - - lua_filter@yuhao_autocompletion_filter - - lua_filter@yuhao_single_char_only_for_full_code - - lua_filter@yuhao_char_first - - lua_filter@yuhao_char_only - - lua_filter@yuhao_tw_first - - lua_filter@yuhao_postpone_full_code + - lua_filter@*yuhao.yuhao_autocompletion_filter + - lua_filter@*yuhao.yuhao_single_char_only_for_full_code + - lua_filter@*yuhao.yuhao_char_first + - lua_filter@*yuhao.yuhao_char_only + - lua_filter@*yuhao.yuhao_tw_first + - lua_filter@*yuhao.yuhao_postpone_full_code - simplifier@simplify - - lua_filter@yuhao_chaifen - - lua_filter@yuhao_embeded_cands@embeded_cands + - lua_filter@*yuhao.yuhao_chaifen_filter + - lua_filter@*yuhao.yuhao_embeded_cands@embeded_cands - uniquifier simplify: