├── .gitattributes ├── xiaoxiao ├── mb │ └── jiandao.ini └── yong.ini ├── dicts ├── cizu_modify.txt.in ├── xiaoxiao.txt ├── 03.fuhao.txt ├── 04.buchong.txt ├── 06.630.txt ├── README.md └── cizu_append.txt.in ├── img └── shortcut.png ├── scripts ├── shortcut │ ├── 键道安装.shortcut │ ├── 键道安装.html │ └── 键道安装.json ├── sanity_check.sh ├── README.md ├── convert_raw_dict.py ├── make_dicts.sh └── installer.bat ├── .gitignore ├── .gitmodules ├── schema ├── recipe.yaml ├── rime.lua ├── lua │ └── jiandao │ │ ├── escape_filter.lua │ │ ├── unicode_translator.lua │ │ ├── smart_selector.lua │ │ ├── hint_filter.lua │ │ ├── date_time_translator.lua │ │ ├── topup_selector.lua │ │ └── calculator.lua └── jiandao.schema.yaml ├── .vscode └── settings.json ├── Makefile ├── README.md ├── .github └── workflows │ └── ci.yaml └── LICENSE /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sh text eol=lf 2 | -------------------------------------------------------------------------------- /xiaoxiao/mb/jiandao.ini: -------------------------------------------------------------------------------- 1 | [IM] 2 | overlay=libmb.so mb/jiandao.txt 3 | -------------------------------------------------------------------------------- /dicts/cizu_modify.txt.in: -------------------------------------------------------------------------------- 1 | 编译 bmyk +250 2 | 便以 bmyk -150 3 | 注释 qjek +150 4 | -------------------------------------------------------------------------------- /img/shortcut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amorphobia/rime-jiandao/HEAD/img/shortcut.png -------------------------------------------------------------------------------- /scripts/shortcut/键道安装.shortcut: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amorphobia/rime-jiandao/HEAD/scripts/shortcut/键道安装.shortcut -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | jiandao.*dict.yaml 2 | dicts/*.bak 3 | dicts/cizu_raw_work.txt 4 | dicts/02.cizu.txt 5 | xiaoxiao/mb/jiandao*.txt 6 | -------------------------------------------------------------------------------- /dicts/xiaoxiao.txt: -------------------------------------------------------------------------------- 1 | oej $hour:$min:$sec 2 | orq $yyyy年$mon0月$day0日 3 | orq $yyyy-$mon0-$day0 4 | orq $YYYY0年$MON月$DAY日 5 | oxq 星期$WEEK 6 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "deps/rime-emoji"] 2 | path = deps/rime-emoji 3 | url = https://github.com/rime/rime-emoji 4 | [submodule "deps/opencc-tonggui"] 5 | path = deps/opencc-tonggui 6 | url = https://github.com/amorphobia/opencc-tonggui 7 | -------------------------------------------------------------------------------- /schema/recipe.yaml: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | --- 3 | recipe: 4 | Rx: jiandao 5 | description: >- 6 | 双拼/音形/顶功输入方案 7 | 原维护者:星空键道6顶功委员会 8 | 9 | install_files: >- 10 | jiandao.*.yaml 11 | lua/jiandao/* 12 | opencc/* 13 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.detectIndentation": false, 3 | "editor.insertSpaces": false, 4 | "editor.tabSize": 16, 5 | "editor.acceptSuggestionOnEnter": "off", 6 | "editor.fontFamily": "Consolas, 'Courier New', monospace, 'Plangothic P2', 'Plangothic P1'", 7 | } 8 | -------------------------------------------------------------------------------- /schema/rime.lua: -------------------------------------------------------------------------------- 1 | smart_selector = require("jiandao/smart_selector") 2 | topup_selector = require("jiandao/topup_selector") 3 | date_time_translator = require("jiandao/date_time_translator") 4 | calculator = require("jiandao/calculator") 5 | unicode_translator = require("jiandao/unicode_translator") 6 | hint_filter = require("jiandao/hint_filter") 7 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ifndef APPEND 2 | APPEND=dicts/cizu_append.txt 3 | endif 4 | ifndef DELETE 5 | DELETE=dicts/cizu_delete.txt 6 | endif 7 | ifndef MODIFY 8 | MODIFY=dicts/cizu_modify.txt 9 | endif 10 | ifndef VERSION 11 | VERSION=latest 12 | endif 13 | 14 | all: dicts 15 | 16 | dicts: 17 | ifndef DEWEIGHT 18 | bash scripts/make_dicts.sh --append $(APPEND) --delete $(DELETE) --modify $(MODIFY) --version $(VERSION) 19 | else 20 | bash scripts/make_dicts.sh --append $(APPEND) --delete $(DELETE) --modify $(MODIFY) --version $(VERSION) --deweight 21 | endif 22 | 23 | check: 24 | bash scripts/sanity_check.sh 25 | 26 | clean: 27 | rm -rf dicts/02.cizu.txt dicts/cizu_raw_work.txt schema/*.dict.yaml temp.txt xiaoxiao/mb/jiandao*.txt 28 | 29 | .PHONY: all dicts deweight check clean 30 | -------------------------------------------------------------------------------- /dicts/03.fuhao.txt: -------------------------------------------------------------------------------- 1 | # 特殊 2 | の dea 3 | ① oyk 4 | ② oxj 5 | ③ osf 6 | ④ osk 7 | ⑤ owj 8 | ⑥ olq 9 | ⑦ oqk 10 | ⑧ obs 11 | ⑨ ojq 12 | ⑩ oek 13 | ✓ og 14 | ✗ ow 15 | ♂ nfi 16 | ♀ nl 17 | *#06# xjlji 18 | # 标点 19 | : ;; 20 | @ ;a 21 | % ;b 22 | - ;c 23 | 、 ;d 24 | ( ;e 25 | “ ;f 26 | ” ;g 27 | 》 ;i 28 | → ;j 29 | ← ;jz 30 | ↑ ;je 31 | ↓ ;jx 32 | 【 ;k 33 | 】 ;l 34 | ’ ;m 35 | ‘ ;n 36 | · ;o 37 | —— ;p 38 | ‰ ;q 39 | ) ;r 40 | …… ;s 41 | ! ;t 42 | 《 ;u 43 | = ;v 44 | ? ;w 45 | + ;x 46 | 〇 ;y 47 | ____ ;z 48 | ?” ;wg 49 | !” ;tg 50 | ……” ;sg 51 | 。” ;jg 52 | # 链接 53 | https:// http 54 | https://xkinput.gitee.io ogw 55 | https://pingshunhuangalex.gitbook.io/rime-xkjd ojj 56 | https://github.com/amorphobia/rime-jiandao orj 57 | https://github.com/xkinput/Rime_JD orj 58 | https://pingshunhuangalex.gitbook.io/rime-xkjd/learn-xkjd/layouts otp 59 | https://docs.qq.com/sheet/BFdiXU0nyc1W1kwuZl3Gx31r2KLm2k3F8YzI4 oyb 60 | https://github.com/rimeinn/rabbit oyt 61 | # 邮箱 62 | @gmail.com ;ag 63 | @outlook.com ;ao 64 | @qq.com ;aq 65 | @163.com ;aw 66 | @126.com ;awy 67 | -------------------------------------------------------------------------------- /scripts/sanity_check.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Sanity Check 4 | # Copyright (C) 2023 Xuesong Peng 5 | 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU Affero General Public License as published 8 | # by the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU Affero General Public License for more details. 15 | 16 | # You should have received a copy of the GNU Affero General Public License 17 | # along with this program. If not, see . 18 | 19 | export LC_ALL=C 20 | 21 | WORK=$(pwd) 22 | 23 | diff <(tr -d '\r' < ${WORK}/dicts/cizu_raw.txt) <(tr -d '\r' < ${WORK}/dicts/cizu_raw.txt | sort -k2,2 -k4,4nr -k5,5nr -k3,3 | awk '!seen[$1,$2]++') 24 | 25 | diff <(tr -d '\r' < ${WORK}/dicts/01.danzi.txt) <(tr -d '\r' < ${WORK}/dicts/01.danzi.txt | sort -t$'\t' -k2,2 -s) 26 | -------------------------------------------------------------------------------- /schema/lua/jiandao/escape_filter.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Unicode Translator 3 | Copyright (C) 2024 Xuesong Peng 4 | 5 | This program is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU Affero General Public License as published 7 | by the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU Affero General Public License for more details. 14 | 15 | You should have received a copy of the GNU Affero General Public License 16 | along with this program. If not, see . 17 | --]] 18 | 19 | local function filter(input) 20 | for cand in input:iter() do 21 | local text = string.gsub(cand.text, "\\n", "\n") 22 | text = string.gsub(text, "\\t", "\t") 23 | text = string.gsub(text, "\\\\", "\\") 24 | new_cand = Candidate(cand.type, cand._start, cand._end, text, cand.comment) 25 | new_cand.preedit = cand.preedit 26 | yield(new_cand) 27 | end 28 | end 29 | 30 | return filter 31 | -------------------------------------------------------------------------------- /scripts/README.md: -------------------------------------------------------------------------------- 1 | # 词典生成脚本 2 | 3 | ## 词典说明 4 | 5 | 这个脚本会读取 `dicts` 目录下的词典文件,在 `schema` 目录下生成 `jiandao.dict.yaml`, `jiandao.base.dict.yaml`, 和 `jiandao.user.dict.yaml` 三个词典。其中 `jiandao.dict.yaml` 仅引用了其他两个文件,`jiandao.base.dict.yaml` 包含了预设的字词,`jiandao.user.dict.yaml` 交由用户添加自定义词语。 6 | 7 | 这个脚本主要工作是转换 cizu 词典,转换好 cizu 词典后会和其他词典合并,生成 Rime 需要的词典。对于 cizu 词典的转换是通过调用 Python 脚本 `convert_raw_dict.py`,从包含**词语**、**全码**、**权重**信息的原始格式的词典文件 cizu_raw.txt 转换为仅含**词语**和**实际编码**的文件。(实际编码会因为词序,由全码缩减部分形码字母) 8 | 9 | 原始格式如下所示: 10 | 11 | ```text 12 | 词语 音码 形码 权重 附加权重 注释 13 | ``` 14 | 15 | 例如: 16 | 17 | ```text 18 | 并不比 bbb ovv 1000 19 | 白板笔 bbb uvu 899 20 | 彬彬 bbbb vv 1000 21 | 斌斌 bbbb oo 899 22 | 并不表示 bbbe ov 1000 23 | 宾白 bbbh ou 1000 24 | 宾部 bbbj oo 1000 25 | 宾补 bbbj oo 899 26 | ``` 27 | 28 | 其中「附加权重」和「注释」为可选项,当需要两个同音码词语权重相同时,他们最终保留的形码字母也会相同,此时脚本会参考附加权重分配首选和次选: 29 | 30 | ```text 31 | 不高兴 bgx voo 1000 2 首选 32 | 不敢想 bgx vav 1000 1 次选 33 | ``` 34 | 35 | 当需要空出编码,使用 `@@@` 作为词语可以占位,如: 36 | 37 | ```text 38 | @@@ kls ??? 1000 1 让位「IOS」 39 | @@@ qeq ??? 1000 1 平衡「这事情」飞键 40 | ``` 41 | 42 | 如果需要附加、删除词语,或者是修改权重,可在脚本参数中指定对应的自定义补丁文件。 43 | 44 | ## 使用方法 45 | 46 | > Windows 用户请使用 WSL 运行 47 | 48 | ```bash 49 | $ script/make_dicts.sh [选项] 50 | ``` 51 | 52 | 当不带任何选项时,默认转换的原始格式词典为 `dicts/cizu_raw.txt`,可使用 `--rawdict <文件>` 来指定其他文件。默认不会进行附加、删除、权重修改的操作,可以通过选项来指定: 53 | 54 | ```bash 55 | --append <文件> # 附加词库,需要是原始格式 56 | --delete <文件> # 要删除的词语,一行一词,格式为 "词语 音码",注意是用 Tab 隔开的 57 | --modify <文件> # 要修改权重的词语,一行一词,格式为 "词语 音码 +250",使用 Tab 隔开,第三列为权重改变的值,可正可负 58 | --deweight # 加上这个选项可以将 630 词汇降权 59 | ``` 60 | 61 | 另外还有一个选项 `--clean` 可以删除生成的词典,恢复未改动的原始格式 cizu_raw.txt 62 | -------------------------------------------------------------------------------- /schema/lua/jiandao/unicode_translator.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Unicode Translator 3 | Copyright (C) 2023 - 2024 Xuesong Peng 4 | 5 | This program is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU Affero General Public License as published 7 | by the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU Affero General Public License for more details. 14 | 15 | You should have received a copy of the GNU Affero General Public License 16 | along with this program. If not, see . 17 | --]] 18 | 19 | local function translator(input, seg) 20 | local delimiter = string.find(input, "uu") 21 | if delimiter ~= nil then 22 | local input_code = string.sub(input, delimiter + 2) 23 | local codepoint = tonumber(input_code, 16) 24 | if codepoint ~= nil then 25 | local ch = utf8.char(codepoint) 26 | local cand = Candidate("unicode", seg.start, seg._end, ch, " Unicode") 27 | -- input_code = string.format("%04s", input_code) 28 | -- string.format not working in Hamster 29 | local num_prefix = 4 - string.len(input_code) 30 | if num_prefix > 0 then 31 | input_code = string.rep("0", num_prefix) .. input_code 32 | end 33 | cand.preedit = "U+" .. string.upper(input_code) 34 | yield(cand) 35 | end 36 | end 37 | end 38 | 39 | return translator 40 | -------------------------------------------------------------------------------- /xiaoxiao/yong.ini: -------------------------------------------------------------------------------- 1 | #!/usr/bin/yong-config 2 | #Yong输入法配置文件 edit for jiandao 3 | 4 | [DESC] 5 | #配置文件版本 6 | version=2 7 | 8 | [IM] 9 | default=0 10 | 0=jiandao 11 | 1=pinyin 12 | #输出方式改为模拟按键 13 | output=3 14 | 15 | #候选字个数 16 | cand=5 17 | #简繁转换 18 | s2t=0 19 | #简繁一对多转换 20 | s2t_m=0 21 | #汉字过滤 0:不过滤 1:常用汉字 22 | filter=0 23 | #默认启动 24 | enable=0 25 | #皮肤 26 | skin=skin 27 | #回车键行为 clear:清编码 commit:上屏首选 28 | #enter=clear 29 | #数字键行为 30 | #num=push 31 | #半角出全角空格 32 | #space=full 33 | #预编辑模式 0:禁用 1:启用 34 | onspot=0 35 | #预编辑类型 0:候选 1:编码 36 | preedit=0 37 | #自动调频 38 | auto_move=0 39 | #历史记录 40 | #history=history.txt 41 | #小键盘 0:默认 1:不作为编码键 2:出数字 42 | keypad=0 43 | 44 | [main] 45 | #用户的配置文件编辑器 46 | edit= 47 | #显示托盘图标 48 | tray=1 49 | #不显示主窗口 50 | noshow=0 51 | #状态栏半透明 52 | tran=0 53 | #主窗口位置 0:右下 1:顶部居中 2:左下 54 | pos=0 55 | 56 | [input] 57 | #编码提示 58 | hint=1 59 | #不使用光标跟随 60 | root=0 61 | #不显示输入窗口 62 | noshow=0 63 | #候选显示长度 64 | strip=9 65 | #新光标跟随方式 66 | a_caret=0 67 | 68 | [key] 69 | #打开输入法 70 | trigger=CTRL_SPACE 71 | #二三重码选择 72 | select=; ' 73 | #中英文切换 74 | CNen=LSHIFT 75 | #临时英语模式 76 | tEN=NONE 77 | #切换输入法 78 | switch=CTRL_LSHIFT 79 | #翻页 80 | page=- = 81 | #以词定字 82 | w2c=[ ] 83 | #汉字过滤 84 | filter=\\ 85 | #调词频 86 | move=CTRL_UP CTRL_DOWN 87 | #显示输入条 88 | ishow=` 89 | #一键切换到输入法 90 | switch_default=CTRL_` 91 | #笔画引导 92 | bihua=CTRL_RSHIFT 93 | 94 | [yong] 95 | name=永码 96 | engine=libmb.so 97 | arg=mb/yong.txt 98 | 99 | [wubi] 100 | name=五笔 101 | engine=libmb.so 102 | arg=mb/wbx.txt 103 | overlay=mb/wbx.ini 104 | 105 | [zhengma] 106 | name=郑码 107 | engine=libmb.so 108 | arg=mb/zhengma.txt 109 | 110 | [erbi] 111 | name=二笔 112 | engine=libmb.so 113 | arg=mb/erbi.txt 114 | 115 | [gbk] 116 | name=内码 117 | engine=libgbk.so 118 | 119 | [pinyin] 120 | name=拼音 121 | engine=libmb.so 122 | arg=mb/pinyin.txt 123 | overlay=mb/pinyin.ini 124 | 125 | [jiandao] 126 | name=🌟️星空键道 127 | engine=libmb.so 128 | arg=mb/jiandao.txt 129 | overlay=mb/jiandao.ini 130 | -------------------------------------------------------------------------------- /schema/lua/jiandao/smart_selector.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Smart Selector 3 | Copyright (C) 2020 lyserenity 4 | Copyright (C) 2023 Xuesong Peng 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as published 8 | by the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | --]] 19 | 20 | local semicolon = "semicolon" 21 | local apostrophe = "apostrophe" 22 | local kRejected = 0 -- do the OS default processing 23 | local kAccepted = 1 -- consume it 24 | local kNoop = 2 -- leave it to other processors 25 | 26 | local function processor(key_event, env) 27 | if key_event:release() or key_event:alt() or key_event:super() then 28 | return kNoop 29 | end 30 | local key = key_event:repr() 31 | if key ~= semicolon and key ~= apostrophe then 32 | return kNoop 33 | end 34 | 35 | local context = env.engine.context 36 | if not context:has_menu() then 37 | return kNoop 38 | end 39 | local page_size = env.engine.schema.page_size 40 | local selected_index = context.composition:back().selected_index 41 | local page_start = (selected_index / page_size) * page_size 42 | 43 | local index = key == semicolon and 1 or 2 44 | if context:select(page_start + index) then 45 | context:commit() 46 | return kAccepted 47 | end 48 | 49 | if not context:get_selected_candidate() then 50 | if context.input:len() <= 1 then 51 | -- 分号引导的符号需要交给下一个处理器 52 | return kNoop 53 | end 54 | context:clear() 55 | else 56 | context:commit() 57 | end 58 | 59 | return kAccepted 60 | end 61 | 62 | return { func = processor } 63 | -------------------------------------------------------------------------------- /schema/lua/jiandao/hint_filter.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Hint Filter 3 | Copyright (C) 2020 Rea 4 | Copyright (C) 2021, 2023 - 2024 Xuesong Peng 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as published 8 | by the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | --]] 19 | 20 | local function startswith(str, start) 21 | return string.sub(str, 1, string.len(start)) == start 22 | end 23 | 24 | local function hint(cand, context, reverse) 25 | if utf8.len(cand.text) < 2 then 26 | return false 27 | end 28 | 29 | local lookup = " " .. reverse:lookup(cand.text) .. " " 30 | local short = string.match(lookup, " ([bcdefghjklmnpqrstwxyz][auiov]+) ") or 31 | string.match(lookup, " ([bcdefghjklmnpqrstwxyz][bcdefghjklmnpqrstwxyz]) ") 32 | local input = context.input 33 | if short and utf8.len(input) > utf8.len(short) and not startswith(short, input) then 34 | cand:get_genuine().comment = cand.comment .. "〔" .. short .. "〕" 35 | return true 36 | end 37 | 38 | return false 39 | end 40 | 41 | local function danzi(cand) 42 | if utf8.len(cand.text) < 2 then 43 | return true 44 | end 45 | return false 46 | end 47 | 48 | local function commit_hint(cand, hint_text) 49 | cand:get_genuine().comment = hint_text .. cand.comment 50 | end 51 | 52 | local function filter(input, env) 53 | local is_danzi_mode_on = env.engine.context:get_option('danzi_mode') 54 | local is_630_hint_on = env.engine.context:get_option('630_hint') 55 | local is_topup_hint_on = env.engine.context:get_option('topup_hint') 56 | local hint_text = env.engine.schema.config:get_string('hint_text') or '🚫' 57 | local first = true 58 | local input_text = env.engine.context.input 59 | local no_commit = is_topup_hint_on and input_text:len() < 4 and input_text:match("^[bcdefghjklmnpqrstwxyz]+$") 60 | for cand in input:iter() do 61 | if first and no_commit and cand.type ~= 'completion' then 62 | commit_hint(cand, hint_text) 63 | end 64 | first = false 65 | if not is_danzi_mode_on or danzi(cand) then 66 | local has_630 = false 67 | if is_630_hint_on then 68 | has_630 = hint(cand, env.engine.context, env.reverse) 69 | end 70 | yield(cand) 71 | end 72 | end 73 | end 74 | 75 | local function init(env) 76 | local dict = env.engine.schema.config:get_string("translator/dictionary") 77 | env.reverse = ReverseLookup(dict) 78 | end 79 | 80 | return { init = init, func = filter } 81 | -------------------------------------------------------------------------------- /schema/lua/jiandao/date_time_translator.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Date & Time Translator 3 | Copyright (C) 2019 Rea 4 | Copyright (C) 2022 Xuesong Peng 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as published 8 | by the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | --]] 19 | 20 | local conf = { 21 | weekday = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}, 22 | number = {"〇", "一", "二", "三", "四", "五", "六", "七", "八", "九"}, 23 | } 24 | 25 | local function toUp(text) 26 | for i, v in ipairs(conf.number) do 27 | text = text:gsub(i-1, v) 28 | end 29 | return text 30 | end 31 | 32 | local function getUpDate() 33 | local m = tonumber(os.date("%m")) 34 | local d = tonumber(os.date("%d")) 35 | 36 | local year = toUp(os.date("%Y")) 37 | local month = toUp(tostring(m)) 38 | if m == 10 then 39 | month = "十" 40 | elseif m > 10 then 41 | month = month:gsub("^一", "十") 42 | end 43 | local date = toUp(tostring(d)) 44 | if d == 10 then 45 | date = "十" 46 | elseif d % 10 == 0 then 47 | date = date:gsub("〇", "十") 48 | elseif d > 10 and d < 20 then 49 | -- common hanzi's lenth is 3 in UTF-8 50 | date = "十" .. date:sub(4) 51 | elseif d > 20 then 52 | date = date:sub(1, 3) .. "十" .. date:sub(4) 53 | end 54 | return year .. "年" .. month .. "月" .. date .. "日" 55 | end 56 | 57 | local function getWeekDay() 58 | local week = os.date("%w") 59 | return conf.weekday[week + 1] 60 | end 61 | 62 | local function translator(input, seg) 63 | if input == "o" then 64 | yield(Candidate("date", seg.start, seg._end, os.date("%H:%M:%S"), "~ej")) 65 | yield(Candidate("date", seg.start, seg._end, os.date("%Y年%m月%d日"), "~rq")) 66 | yield(Candidate("date", seg.start, seg._end, getWeekDay(), "~xq")) 67 | elseif input == "oe" then 68 | yield(Candidate("date", seg.start, seg._end, os.date("%H:%M:%S"), "~j")) 69 | elseif input == "or" then 70 | yield(Candidate("date", seg.start, seg._end, os.date("%Y年%m月%d日"), "~q")) 71 | elseif input == "ox" then 72 | yield(Candidate("date", seg.start, seg._end, getWeekDay(), "~q")) 73 | elseif input == "oej" then 74 | yield(Candidate("date", seg.start, seg._end, os.date("%H:%M:%S"), "")) 75 | elseif input == "orq" then 76 | yield(Candidate("date", seg.start, seg._end, os.date("%Y年%m月%d日"), "")) 77 | yield(Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), "")) 78 | yield(Candidate("date", seg.start, seg._end, getUpDate(), "")) 79 | elseif input == "oxq" then 80 | yield(Candidate("date", seg.start, seg._end, getWeekDay(), "")) 81 | end 82 | end 83 | 84 | return translator 85 | -------------------------------------------------------------------------------- /schema/lua/jiandao/topup_selector.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Topup Selector 3 | Copyright (C) 2020 TsFreddie 4 | Copyright (C) 2024 Xuesong Peng 5 | 6 | https://github.com/xkjd27/rime_jd27c/blob/e38a8c5d010d5a3933e6d6d8265c0cf7b56bfcca/rime/lua/jd27_topup.lua 7 | 顶功处理器 by TsFreddie 8 | 9 | ------------ 10 | Schema配置 11 | ------------ 12 | 1. 将topup.lua添加至rime.lua 13 | topup_processor = require("topup") 14 | 15 | 2. 将topup_processor挂接在speller之前 16 | processors: 17 | ... 18 | - lua_processor@topup_processor 19 | - speller 20 | ... 21 | 22 | 3. 配置顶功处理器 23 | topup: 24 | topup_with: "aeiov" # 顶功集合码,通常为形码 25 | min_length: 4 # 无顶功码自动上屏的长度 26 | min_length_danzi: 2 # 单字模式无顶功码自动上屏的长度(开关:danzi_mode) 27 | max_length: 6 # 全码上屏的长度 28 | auto_clear: true # 顶功空码时是否清空输入 29 | topup_command: false # 为true时,首码为顶码时禁用顶功逻辑(如orq) 30 | --]] 31 | 32 | local function string2set(str) 33 | local t = {} 34 | for i = 1, #str do 35 | local c = str:sub(i,i) 36 | t[c] = true 37 | end 38 | return t 39 | end 40 | 41 | local function topup(env) 42 | if not env.engine.context:get_selected_candidate() then 43 | if env.auto_clear then 44 | env.engine.context:clear() 45 | end 46 | else 47 | env.engine.context:commit() 48 | end 49 | end 50 | 51 | local function processor(key_event, env) 52 | local engine = env.engine 53 | local schema = engine.schema 54 | local context = engine.context 55 | 56 | local input = context.input 57 | local input_len = #input 58 | 59 | local min_len = env.topup_min 60 | if context:get_option('danzi_mode') then 61 | min_len = env.topup_min_danzi 62 | end 63 | 64 | if key_event:release() or key_event:ctrl() or key_event:alt() then 65 | return 2 66 | end 67 | 68 | local ch = key_event.keycode 69 | 70 | if ch < 0x20 or ch >= 0x7f then 71 | return 2 72 | end 73 | 74 | local key = string.char(ch) 75 | local prev = string.sub(input, -1) 76 | local first = string.sub(input, 1, 1) 77 | if #first == 0 then 78 | first = key 79 | end 80 | 81 | local is_alphabet = env.alphabet[key] or false 82 | local is_topup = env.topup_set[key] or false 83 | local is_prev_topup = env.topup_set[prev] or false 84 | local is_first_topup = env.topup_set[first] or false 85 | 86 | 87 | if env.topup_command and is_first_topup then 88 | return 2 89 | end 90 | 91 | if not is_alphabet then 92 | return 2 93 | end 94 | 95 | if is_prev_topup and not is_topup then 96 | topup(env) 97 | elseif not is_prev_topup and not is_topup and input_len >= min_len then 98 | topup(env) 99 | elseif input_len >= env.topup_max then 100 | topup(env) 101 | end 102 | 103 | if not is_prev_topup and not is_topup and env.mem and env.topup_empty then 104 | -- input_len < min_len now 105 | local input_to_be = input .. key 106 | if not env.mem:dict_lookup(input_to_be, true, 1) then 107 | context:commit() 108 | end 109 | end 110 | 111 | return 2 112 | end 113 | 114 | local function init(env) 115 | local config = env.engine.schema.config 116 | 117 | env.topup_set = string2set(config:get_string("topup/topup_with")) 118 | env.alphabet = string2set(config:get_string("speller/alphabet")) 119 | env.topup_min = config:get_int("topup/min_length") 120 | env.topup_min_danzi = config:get_int("topup/min_length_danzi") or env.topup_min 121 | env.topup_max = config:get_int("topup/max_length") 122 | env.auto_clear = config:get_bool("topup/auto_clear") or false 123 | env.topup_command = config:get_bool("topup/topup_command") or false 124 | env.topup_empty = config:get_bool("topup/topup_empty") or false 125 | env.enabled = true 126 | 127 | env.mem = env.mem or Memory(env.engine, env.engine.schema) 128 | end 129 | 130 | return { init = init, func = processor } 131 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🌟️星空键道输入方案 2 | 3 | 配方:℞ jiandao ([在线试用](https://my-rime.vercel.app/?plum=amorphobia/rime-jiandao@release:jiandao)) 4 | 5 | 🌟️星空键道:自由的顶功输入方案 6 | 7 | 原作者:吅吅大山,官方仓库([GitHub](https://github.com/xkinput/Rime_JD),[Gitee](https://gitee.com/xkinput/Rime_JD)) 8 | 9 | ## 动机 10 | 11 | 旨在提供一份配置有优化、文件去冗余的键道配方仓库。初期词库将和官方一致,之后会根据需要[修改](#与官方方案不同之处)。 12 | 13 | ## 安装 14 | 15 | 多种方式可以使用,前两种可用补丁形式对 cizu 进行修改,后三种方式无法对 cizu 词典进行非覆盖式的修改,请自行选择,注意有可能需要手动在 `default.custom.yaml` 里添加本方案 (jiandao)。 16 | 17 | ### 1. 使用 Github Actions 自动生成方案文件 18 | 19 | Fork 本仓库后,可以把需要添加、删除、修改权重的词语按需要的格式放到 `dicts` 目录下的 `cizu_append.txt`, `cizu_delete.txt`, 和 `cizu_modify.txt` 文件中,当推送到 Github 的时候,可以自动生成方案文件,生成的文件可以在 Actions 里面找到。 20 | 21 | ### 2. 克隆并在本地生成词库 22 | 23 | > Windows 用户请使用 WSL 运行 24 | 25 | 克隆仓库后,执行以下命令(详情请看[词典生成脚本说明](scripts/README.md)) 26 | 27 | ```bash 28 | scrips/make_dicts.sh --append --delete --modify [--deweight] 29 | ``` 30 | 31 | 需要修改为你自己的对应文件名,也可省略选项。生成的方案在 `schema` 目录中。 32 | 33 | ### 3. 不同平台的安装脚本 / 快捷指令 34 | 35 | #### My RIME 网页版 36 | 37 | 可直接访问[链接](https://my-rime.vercel.app/?plum=amorphobia/rime-jiandao@release:jiandao),等待部署完成即可试用。 38 | 39 | #### 小狼毫:PowerShell 小工具(内含于批处理脚本中) 40 | 41 | **方式一** 在发布页面([GitHub](https://github.com/amorphobia/rime-jiandao/releases),[Gitee](https://gitee.com/amorphobia/rime-jiandao/releases))下载 `weasel-installer.bat` 到本地,双击运行。 42 | 43 | **方式二** 在 PowerShell 中执行以下命令,然后按照提示安装即可。 44 | 45 | ```PowerShell 46 | # GitHub 47 | irm https://raw.githubusercontent.com/amorphobia/rime-jiandao/master/scripts/installer.bat | iex 48 | # Gitee 49 | irm https://gitee.com/amorphobia/rime-jiandao/raw/master/scripts/installer.bat | iex 50 | ``` 51 | 52 | #### 小小输入法 53 | 54 | > [!NOTE] 55 | > 本仓库不会主动打包小小输入法的主程序,请在小小输入法的[官方网站](http://yong.dgod.net/download/)或者[官方网盘](http://yongim.ysepan.com/)下载 56 | 57 | 在发布页面([GitHub](https://github.com/amorphobia/rime-jiandao/releases),[Gitee](https://gitee.com/amorphobia/rime-jiandao/releases))下载最新版的 `jiandao-xiaoxiao-.zip`,将压缩包全部内容解压到输入法目录下的 `.yong` 里,注意文件夹名字由英文半角句点开头,若无此文件夹请新建。 58 | 59 | 如果遇到错误,运行一次 `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` 再试。 60 | 61 | #### 仓输入法:快捷指令 62 | 63 | 获取快捷指令 64 | 65 | 在 iOS / iPadOS 上点击即可下载快捷指令,或者在其他设备上从这里([GitHub](https://github.com/amorphobia/rime-jiandao/raw/master/scripts/shortcut/%E9%94%AE%E9%81%93%E5%AE%89%E8%A3%85.shortcut), [Gitee](https://gitee.com/amorphobia/rime-jiandao/raw/master/scripts/shortcut/%E9%94%AE%E9%81%93%E5%AE%89%E8%A3%85.shortcut))下载,并分享给 iOS / iPadOS 并打开。 66 | 67 | > 可[点此查看](https://html-preview.github.io/?url=https://github.com/amorphobia/rime-jiandao/blob/master/scripts/shortcut/%E9%94%AE%E9%81%93%E5%AE%89%E8%A3%85.html)快捷指令“源代码”的网页视图,使用 [Shortcut Source Tool](https://routinehub.co/shortcut/5256/) 生成;若已经在使用 Shortcut Source Tool,也可以用它导入 JSON 格式的“源代码”([GitHub](https://github.com/amorphobia/rime-jiandao/raw/master/scripts/shortcut/%E9%94%AE%E9%81%93%E5%AE%89%E8%A3%85.json), [Gitee](https://gitee.com/amorphobia/rime-jiandao/raw/master/scripts/shortcut/%E9%94%AE%E9%81%93%E5%AE%89%E8%A3%85.json))。 68 | 69 | ### 4. 下载 Zip 包 70 | 71 | 请在发布页面([GitHub](https://github.com/amorphobia/rime-jiandao/releases),[Gitee](https://gitee.com/amorphobia/rime-jiandao/releases))下载打包好的方案,解压文件到对应的目录。 72 | 73 | ### 5. 东风破 74 | 75 | ```bash 76 | bash rime-install amorphobia/rime-jiandao@release 77 | ``` 78 | 79 | ## 与官方方案不同之处 80 | 81 | ### 配置的不同 82 | 83 | - 微调了开关菜单,不再提供关闭630全码词的开关(取而代之的是在构建词库时把630全码词权重降低) 84 | - 关闭了自动上屏,默认使用顶功上屏 85 | - 次选使用分号键,单引号用作三选 86 | - 一些开关的快捷键修改 87 | - 将 lua 脚本统一放入 `jiandao` 子目录,避免冲突 88 | - 提供了一个统一码翻译器(Unicode Translator),可以通过 `uu` 引导统一码来输入 89 | - 简繁转换使用中国大陆标准([opencc-tonggui](https://github.com/amorphobia/opencc-tonggui)) 90 | 91 | ### 词典的不同 92 | 93 | 详见[词典说明](dicts/README.md) 94 | 95 | ## 开源许可 96 | 97 | 原有的内容无开源许可声明,遵循[《中华人民共和国著作权法》](http://www.npc.gov.cn/npc/c30834/202011/848e73f58d4e4c5b82f69d25d46048c6.shtml) 98 | 99 | 本仓库新增内容使用 [AGPL-3.0](LICENSE) 许可 100 | -------------------------------------------------------------------------------- /scripts/convert_raw_dict.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | ''' 4 | Convert Raw Dict 5 | Copyright (c) 2023 Xuesong Peng 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as published 9 | by the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | ''' 20 | 21 | # 经本程序处理后的词典是未排序的,用管道传递给其他程序以进行排序,如: 22 | # python3 convert_raw_dict.py cizu_raw.txt | sort -k2 -s > cizu_new.txt 23 | 24 | import csv 25 | import sys 26 | file = str(sys.argv[1]) 27 | 28 | # 词典原始数据文件格式应为 tab 隔开的字符串,其含义分别为 29 | # 词语 音码 形码 权重 次要权重 注释 30 | # 其中,词语字符串 "@@@" 为占位符,代表该位置由其他词典的词语补充 31 | # 其他信息可以是注释,例如古诗的题目: 32 | # 床前明月光,疑是地上霜。举头望明月,低头思故乡。 jys voi 899 1 《静夜思》 33 | # 也可以是权重相同时的附加权重,用于原始数据的排序,例如: 34 | # 不高兴 bgx voo 1000 2 首选 35 | # 不敢想 bgx vav 1000 1 次选 36 | with open(file) as f: 37 | reader = csv.reader(f, delimiter="\t") 38 | data = list(reader) 39 | 40 | curr_phone_3ch = "" 41 | homophones_3ch = [] 42 | curr_phone_och = "" 43 | homophones_och = [] 44 | 45 | class Node: 46 | def __init__(self, prefix, level): 47 | self.prefix = prefix 48 | self.level = level 49 | self.data = [] 50 | self.children = {} 51 | def available(self): 52 | return len(self.data) == 0 or (self.level > 0 and self.prefix == "") 53 | 54 | def insert_tree(tree, data, level): 55 | key = data[2][level-1:level] 56 | weight = int(data[3]) 57 | if key in tree.keys(): 58 | if tree[key].available(): 59 | tree[key].data.append(data) 60 | else: 61 | exist_data = tree[key].data[0] 62 | exist_weight = int(exist_data[3]) 63 | if weight == exist_weight: 64 | tree[key].data.append(data) 65 | elif weight > exist_weight: 66 | for d in tree[key].data: 67 | insert_tree(tree[key].children, d, level+1) 68 | tree[key].data = [data] 69 | else: 70 | insert_tree(tree[key].children, data, level+1) 71 | else: 72 | tree[key] = Node(key, level) 73 | tree[key].data.append(data) 74 | 75 | def print_tree(tree, prefix): 76 | for key, val in tree.items(): 77 | for item in val.data: 78 | print(item[0] + '\t' + item[1] + prefix + val.prefix) 79 | print_tree(val.children, prefix + val.prefix) 80 | 81 | def dump_tree(tree, prefix): 82 | result = [] 83 | for key, val in tree.items(): 84 | for item in val.data: 85 | if item[0] == "@@@": 86 | continue 87 | result.append([item[0], item[1] + prefix + val.prefix, item[3]]) 88 | sub_result = dump_tree(val.children, prefix + val.prefix) 89 | result += sub_result 90 | result.sort(key=lambda x:(x[1], -int(x[2]))) 91 | return result 92 | 93 | def do_process(homophones): 94 | tree = {} 95 | for item in homophones: 96 | insert_tree(tree, item, 0) 97 | result = dump_tree(tree, '') 98 | for item in result: 99 | print(item[0] + '\t' + item[1]) 100 | 101 | for item in data: 102 | if int(item[3]) == 0: 103 | continue 104 | if len(item[1]) == 3: 105 | if item[1] != curr_phone_3ch: 106 | do_process(homophones_3ch) 107 | homophones_3ch = [] 108 | curr_phone_3ch = item[1] 109 | homophones_3ch.append(item) 110 | else: 111 | if item[1] != curr_phone_och: 112 | do_process(homophones_och) 113 | homophones_och = [] 114 | curr_phone_och = item[1] 115 | homophones_och.append(item) 116 | 117 | do_process(homophones_3ch) 118 | do_process(homophones_och) 119 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: Continuous Integration 2 | on: 3 | workflow_dispatch: 4 | inputs: 5 | disable_de_weight_630: 6 | description: '禁用权重降低选项 true / false (默认不禁用)' 7 | required: true 8 | default: 'false' 9 | push: 10 | branches: 11 | - master 12 | - dev 13 | tags: 14 | - 'v*' 15 | 16 | jobs: 17 | sanity-check: 18 | name: Dictionary Sanity Check 19 | runs-on: ubuntu-latest 20 | steps: 21 | - name: Checkout 22 | uses: actions/checkout@v4 23 | 24 | - name: Sanity Check 25 | run: | 26 | make check 27 | 28 | pack-schema: 29 | name: Pack Schema 30 | runs-on: ubuntu-latest 31 | needs: sanity-check 32 | steps: 33 | - name: Checkout 34 | uses: actions/checkout@v4 35 | with: 36 | submodules: 'recursive' 37 | 38 | - name: Make Dicts 39 | run: | 40 | if [[ "${{ github.event.inputs.disable_de_weight_630 }}" == "true" ]]; then 41 | make dicts VERSION=${{ github.ref_name }} 42 | else 43 | make dicts DEWEIGHT=1 VERSION=${{ github.ref_name }} 44 | fi 45 | 46 | - name: Build Opencc Dependencies 47 | run: | 48 | sudo apt-get install -y opencc 49 | if command -v opencc &> /dev/null; then 50 | echo "$(opencc --version)" 51 | mkdir -p schema/opencc 52 | opencc -c t2s.json -i deps/rime-emoji/opencc/emoji_category.txt | awk '!seen[$1]++' > schema/opencc/emoji_category.txt 53 | opencc -c t2s.json -i deps/rime-emoji/opencc/emoji_word.txt | awk '!seen[$1]++' > schema/opencc/emoji_word.txt 54 | # https://github.com/rime/rime-emoji/issues/48 55 | sed -i 's/鼔/鼓/g' schema/opencc/emoji_word.txt 56 | cp deps/rime-emoji/opencc/emoji.json schema/opencc/ 57 | 58 | make -C deps/opencc-tonggui 59 | cp deps/opencc-tonggui/opencc/* schema/opencc/ 60 | fi 61 | 62 | - name: Make Zip 63 | run: | 64 | cd schema 65 | rm recipe.yaml 66 | zip -r -q ../jiandao.zip * -x rime.lua 67 | 68 | - name: Make Legacy Zip 69 | run: | 70 | cd schema 71 | sed -i 's/*jiandao\///g' jiandao.schema.yaml 72 | zip -r -q ../jiandao-legacy.zip * 73 | 74 | - name: Make Xiaoxiao Zip 75 | run: | 76 | cd xiaoxiao 77 | zip -r -q ../jiandao-xiaoxiao.zip * 78 | 79 | - name: Upload Artifact 80 | uses: actions/upload-artifact@v4 81 | with: 82 | name: zips 83 | path: | 84 | jiandao.zip 85 | jiandao-legacy.zip 86 | jiandao-xiaoxiao.zip 87 | 88 | create-release: 89 | name: Create Release 90 | if: startsWith(github.ref, 'refs/tags/v') 91 | runs-on: ubuntu-latest 92 | needs: pack-schema 93 | steps: 94 | - name: Checkout 95 | uses: actions/checkout@v4 96 | 97 | - name: Download Artifacts 98 | uses: actions/download-artifact@v4 99 | with: 100 | name: zips 101 | 102 | - name: Unzip & Rename Release Zip Archive 103 | run: | 104 | unzip jiandao.zip -d release 105 | mv schema/recipe.yaml release/ 106 | mv jiandao.zip jiandao-${{ github.ref_name }}.zip 107 | mv jiandao-legacy.zip jiandao-legacy-${{ github.ref_name }}.zip 108 | mv jiandao-xiaoxiao.zip jiandao-xiaoxiao-${{ github.ref_name }}.zip 109 | cp scripts/installer.bat weasel-installer.bat 110 | 111 | - name: Create Release and Upload Assets 112 | uses: softprops/action-gh-release@v2 113 | with: 114 | files: | 115 | jiandao-${{ github.ref_name }}.zip 116 | jiandao-legacy-${{ github.ref_name }}.zip 117 | jiandao-xiaoxiao-${{ github.ref_name }}.zip 118 | weasel-installer.bat 119 | 120 | - name: Push to Release 121 | uses: s0/git-publish-subdir-action@v2.6.0 122 | env: 123 | REPO: self 124 | BRANCH: release 125 | FOLDER: release 126 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 127 | MESSAGE: "Release ${{ github.ref_name }}" 128 | -------------------------------------------------------------------------------- /dicts/04.buchong.txt: -------------------------------------------------------------------------------- 1 | # 一简 2 | 那 a 3 | 上 i 4 | 啊 o 5 | 得 u 6 | 有 v 7 | # 二简 8 | 表示 be 9 | 并且 bq 10 | 不同 bt 11 | 不行 bx 12 | 不要 by 13 | 从此 cc 14 | 错过 cg 15 | 聪明 cm 16 | 采取 cq 17 | 操心 cx 18 | 电脑 dn 19 | 大小 dx 20 | 上次 ec 21 | 是的 ed 22 | 说明 em 23 | 使用 ey 24 | 服从 fc 25 | 中国 fg 26 | 符合 fh 27 | 父母 fm 28 | 刚才 gc 29 | 赶快 gk 30 | 光明 gm 31 | 花草 hc 32 | 很快 hk 33 | 后面 hm 34 | 快餐 kc 35 | 可靠 kk 36 | 开门 km 37 | 两年 ln 38 | 明天 mt 39 | 梦想 mx 40 | 满意 my 41 | 哪怕 np 42 | 平时 pe 43 | 脾气 pq 44 | 平台 pt 45 | 平安 px 46 | 拼音 py 47 | 如此 rc 48 | 人工 rg 49 | 如何 rh 50 | 人们 rm 51 | 日期 rq 52 | 热搜 rs 53 | 热线 rx 54 | 三次 sc 55 | 搜狗 sg 56 | 司马 sm 57 | 索取 sq 58 | 思想 sx 59 | 太难 tn 60 | 提前 tq 61 | 同学 tx 62 | 为此 wc 63 | 我是 we 64 | 外面 wm 65 | 完全 wq 66 | 因此 yc 67 | 以及 yj 68 | 郁闷 ym 69 | 一年 yn 70 | 要求 yq 71 | 有人 yr 72 | 以下 yx 73 | 因而 yx 74 | 字词 zc 75 | 做饭 zf 76 | 字根 zg 77 | 在吗 zm 78 | 组长 zq 79 | 昨天 zt 80 | 仔细 zx 81 | # 一简二重 82 | 又 a 83 | 吧 b 84 | 此 c 85 | 都 d 86 | 识 e 87 | 之 f 88 | 好 h 89 | 打 i 90 | 及 j 91 | 啦 l 92 | 嘛 m 93 | 能 n 94 | 着 o 95 | 其 q 96 | 嗯 x 97 | 意 y 98 | 玩 w 99 | 咋 z 100 | # 一简三重 101 | 实 e 102 | 支 f 103 | 鸡 j 104 | 期 q 105 | 哦 x 106 | 疫 y 107 | 子 z 108 | # 二简二重 109 | 叭 bs 110 | 熛 bq 111 | 抱 bz 112 | 猜 ch 113 | 带 dh 114 | 打 ds 115 | 氏 ek 116 | 呵 he 117 | 脚 jc 118 | 届 jd 119 | 竞 jg 120 | 急 jk 121 | 咯 ll 122 | 凉 lx 123 | 佬 lz 124 | 拿 ns 125 | 噗 pj 126 | 屁 pk 127 | 弃 qk 128 | 挺 tg 129 | 哇 ws 130 | 喂 ww 131 | 重 wy 132 | 唉 xh 133 | 兮 xk 134 | 需 xl 135 | 玄 xt 136 | 耶 ye 137 | 砚 yf 138 | 雁 yf 139 | 越 yh 140 | 咦 yk 141 | 哟 yl 142 | 远 yt 143 | 啧 ze 144 | 赞 zf 145 | # 二简三重 146 | 视 ek 147 | 嘁 qk 148 | 哎 xh 149 | 噫 yk 150 | 愈 yl 151 | # syxb 单字 152 | 实 ekbo 153 | 视 ekei 154 | 势 ekfa 155 | 示 ekxi 156 | 恃 ekxv 157 | 识 ekyo 158 | 甥 erei 159 | 支 fkea 160 | 执 fkfu 161 | 庄 fxgv 162 | 饺 jceo 163 | 竞 jglo 164 | 寂 jkbi 165 | 鸡 jkyu 166 | 嫁 jsno 167 | 悉 xkpo 168 | 疫 ykbu 169 | 意 yklo 170 | 毅 yklu 171 | 怡 ykxa 172 | # 词组二重 173 | 失意 ekyk 174 | 人士 rnek 175 | 暗喻 xfyl 176 | # 补充词组 177 | 富强 民主 文明 和谐 自由 平等 公正 法治 爱国 敬业 诚信 友善 fmwh 178 | 国民生产总值 gdp 179 | # 补充提示 180 | 乛 a 181 | 𠃌 a 182 | 氵 a 183 | 氺 a 184 | 乚 a 185 | ⺄ a 186 | 𠃊 a 187 | ㇉ a 188 | 𠄌 a 189 | 乁 a 190 | 𠃍 a 191 | 𠃋 a 192 | 𠃑 a 193 | 龵 i 194 | 人 i 195 | 丨 i 196 | 亅 i 197 | 丶 o 198 | 乀 o 199 | 丿 u 200 | 木 v 201 | 土 v 202 | 士 v 203 | 一 v 204 | 朩 v 205 | # 部首偏旁 206 | 㔾 aa 207 | 巛 aaa 208 | 毌 aaiv 209 | 㡭 aaoaao 210 | 糸 aaoiuo 211 | 彑 aav 212 | 纟 aav 213 | 阝 ai 214 | 卩 ai 215 | 丩 ai 216 | 凵 ai 217 | 芔 aiiaiu 218 | 艸 aiuaii 219 | 茻 aiuaii 220 | ⺪ aiviv 221 | 疋 aivuo 222 | 贝 ao 223 | 又 ao 224 | 厶 ao 225 | 廴 ao 226 | 龴 ao 227 | 乄 ao 228 | 夋 aououa 229 | 癶 aouuo 230 | 𢀖 aoviv 231 | 𠬤 aovvi 232 | 丱 auiiv 233 | 𠃓 auu 234 | コ av 235 | ユ av 236 | 卂 avi 237 | 叚 avivva 238 | 夬 avuo 239 | 彐 avv 240 | 肀 avvi 241 | ⺻ avviv 242 | 𭃂 avvu 243 | 冂 ia 244 | 罒 iaiiv 245 | 屵 iaivu 246 | 龱 iauov 247 | 〢 ii 248 | 艹 ii 249 | 刂 ii 250 | 𰀡 iiao 251 | 𫇦 iioa 252 | 𰀢 iiuvo 253 | 金 io 254 | 钅 io 255 | ⺌ iou 256 | 龸 iouoa 257 | 氺 iovuo 258 | 扌 iu 259 | 手 iu 260 | リ iu 261 | 龵 iu 262 | ⺗ iuoo 263 | 𣥂 iuu 264 | 丄 iv 265 | ⺊ iv 266 | 攴 ivao 267 | 卝 iviv 268 | 佥 ivoou 269 | 龰 ivuo 270 | ⺿ ivvi 271 | 冖 oa 272 | 讠 oa 273 | 礻 oaio 274 | 衤 oaiuo 275 | 辶 oao 276 | 冘 oaua 277 | 㓁 oauo 278 | 日 oi 279 | 𧾷 oiviv 280 | ⺀ oo 281 | 宀 ooa 282 | 忄 ooi 283 | 灬 oooo 284 | 𭕄 oou 285 | 𰃮 oouoa 286 | 氵 oov 287 | 丷 ou 288 | 肙 ouu 289 | 䒑 ouv 290 | 屰 ouvaiu 291 | ⺷ ouvviv 292 | 龹 ouvvuo 293 | ⺶ ouvvvu 294 | 亠 ov 295 | 冫 ov 296 | 㐬 ovaoui 297 | 丬 ovi 298 | 𰁜 oviiuo 299 | 啇 ovouia 300 | 疒 ovuov 301 | ⺈ ua 302 | 勹 ua 303 | 匕 ua 304 | 几 ua 305 | 𠂊 ua 306 | 饣 uaa 307 | 夂 uao 308 | 夊 uao 309 | 夅 uaovai 310 | 犭 uau 311 | 𠂎 uau 312 | 𧘇 uauo 313 | 厃 uavu 314 | 亻 ui 315 | 十 uo 316 | 㐅 uo 317 | 龺 uooiuo 318 | 𠂭 uooooo 319 | 爫 uoou 320 | 乊 uou 321 | 尣 uoua 322 | 𢦏 uovauo 323 | 耂 uovu 324 | 𠂆 uu 325 | 彡 uuu 326 | 𠂉 uv 327 | 牜 uviv 328 | 𠂒 uviv 329 | ⺧ uviv 330 | 𥫗 uvouvo 331 | 攵 uvuo 332 | 龵 uvvu 333 | 钅 uvvva 334 | 匚 va 335 | 匸 va 336 | 丂 va 337 | 㐄 vai 338 | 𠫓 vao 339 | 旡 vaua 340 | 𰀂 vav 341 | 𰀄 vav 342 | 疌 vavviv 343 | 丅 vi 344 | 覀 viaiiv 345 | 𰀉 viavi 346 | 艹 vii 347 | 龷 viiv 348 | 扌 viv 349 | 土 vo 350 | 士 vo 351 | 𠮛 vo 352 | 畐 voiavi 353 | 𠂇 vu 354 | 丆 vu 355 | 廾 vui 356 | 𰀁 vvi 357 | 𠀎 vviiv 358 | 𠩺 vviuou 359 | 龶 vviv 360 | 𤣩 vviv 361 | 𡗗 vvvuo 362 | # 多音节汉字 363 | 𤿱 bdpkoa #喃字 364 | 兡 bhkeuo 365 | 瓸 bhwsva 366 | 𱁬 dbdsvo 367 | 𠀲 dgdlvi #喃字 368 | 𠁀 ekdhvi #喃字 369 | 兙 ekkeuo 370 | 瓧 ekwsva 371 | 瓰 fnwsva 372 | 瓱 hzwsva 373 | 兝 gyfnuo 374 | 浬 hhlkai 375 | 兞 hzkeuo 376 | 𠀴 jjxsai #喃字 377 | 𠙣 jkbsua #喃字 378 | 𰇠 jslwau 379 | 𠄯 kbbnvv #喃字 380 | 兣 lkkeuo 381 | 甅 lkwsva 382 | 瓼 lkwsva 383 | 糎 lkmkou 384 | 鿡 llxjiu #繁体 ⿰罗尔 385 | 𦒹 lzlquo #喃字 386 | 麿 msllov #日本汉字 387 | 兛 qmkeuo 388 | 粁 qmmkou 389 | 瓩 qmwsva 390 | 瓲 twwsva 391 | 𠀿 xswbvi #喃字 392 | 吋 ygcwov 393 | 哩 yglkoi 394 | 唡 yglxov 395 | 𠺖 ygmjoo 396 | 呎 ygwkoa 397 | 㖊 ygxwoa 398 | 𠀳 ykxsao #喃字 399 | -------------------------------------------------------------------------------- /schema/jiandao.schema.yaml: -------------------------------------------------------------------------------- 1 | # Rime schema settings 2 | # encoding: utf-8 3 | 4 | schema: 5 | schema_id: jiandao 6 | name: 🌟️星空键道 7 | version: "6" 8 | author: 9 | - 发明人:吅吅大山 10 | description: | 11 | 双拼/音形/顶功输入方案 12 | 原维护者:星空键道6顶功委员会 13 | 14 | # Layout config 15 | layout: 16 | topup: 17 | topup_this: "bcdefghjklmnpqrstwxyz" 18 | topup_with: "avuio;" 19 | 20 | algebra: 21 | - derive/^[bcdefghjklmnpqrstwxyz;]([bcdefghjklmnpqrstwxyz;][avuio].*)$/`$1/ 22 | - derive/^([bcdefghjklmnpqrstwxyz;])[bcdefghjklmnpqrstwxyz;]([avuio].*)$/$1`$2/ 23 | - derive/^([bcdefghjklmnpqrstwxyz;`]{2})[avuio](.*)$/$1`$2/ 24 | - derive/^([bcdefghjklmnpqrstwxyz;`]{2}[avuio`]).(.*)$/$1`$2/ 25 | - derive/^([bcdefghjklmnpqrstwxyz;`]{2}[avuio`]{2}).(.*)$/$1`$2/ 26 | - derive/^([bcdefghjklmnpqrstwxyz;`]{2}[avuio`]{3}).(.*)$/$1`$2/ 27 | - derive/^([bcdefghjklmnpqrstwxyz;`]{2}[avuio`]{4}).(.*)$/$1`$2/ 28 | - derive/^([bcdefghjklmnpqrstwxyz;`]{2}[avuio`]{5}).$/$1`/ 29 | - derive/^[bcdefghjklmnpqrstwxyz;]{2}([avuio`]*)$/``$1/ 30 | 31 | switches: 32 | - name: ascii_mode 33 | reset: 0 34 | states: [ 中, En ] 35 | - name: full_shape 36 | states: [ 半, 全 ] 37 | - name: traditionalization 38 | states: [ 汉, 漢 ] 39 | - name: 630_hint 40 | reset: 1 41 | states: [ "关", "630提示" ] 42 | - name: topup_hint 43 | reset: 1 44 | states: [ "关", "顶功提示" ] 45 | - name: emoji_suggestion 46 | reset: 0 47 | states: [ "无", "🈶" ] 48 | 49 | engine: 50 | processors: 51 | - ascii_composer 52 | - recognizer 53 | - key_binder 54 | - lua_processor@*jiandao/smart_selector 55 | - lua_processor@*jiandao/topup_selector 56 | - speller 57 | - punctuator 58 | - selector 59 | - navigator 60 | - express_editor 61 | segmentors: 62 | - ascii_segmentor 63 | - matcher 64 | - abc_segmentor 65 | - punct_segmentor 66 | - fallback_segmentor 67 | translators: 68 | - punct_translator 69 | - table_translator@custom_phrase 70 | - table_translator 71 | - history_translator@repeat_history 72 | - lua_translator@*jiandao/date_time_translator 73 | - lua_translator@*jiandao/calculator 74 | - lua_translator@*jiandao/unicode_translator 75 | filters: 76 | - simplifier@emoji_suggestion 77 | - uniquifier 78 | - lua_filter@*jiandao/hint_filter 79 | - simplifier@traditionalization 80 | - reverse_lookup_filter@danzi_lookup 81 | - lua_filter@*jiandao/escape_filter 82 | 83 | speller: 84 | algebra: 85 | __include: "layout/algebra" 86 | auto_select: false 87 | alphabet: "zyxwvutsrqponmlkjihgfedcba;`" 88 | initials: "abcdefghijklmnopqrstuvwxyz;`" 89 | 90 | translator: 91 | dictionary: jiandao 92 | enable_charset_filter: false 93 | enable_completion: true 94 | enable_encoder: true 95 | enable_sentence: false 96 | enable_user_dict: false 97 | encode_commit_history: true 98 | max_phrase_length: 6 99 | 100 | repeat_history: 101 | input: ;h #重复上次上屏内容 102 | size: 1 103 | initial_quality: 10000 104 | 105 | emoji_suggestion: 106 | opencc_config: emoji.json 107 | option_name: emoji_suggestion 108 | tips: all 109 | 110 | traditionalization: 111 | opencc_config: s2tg.json 112 | option_name: traditionalization 113 | 114 | danzi_lookup: 115 | dictionary: jiandao 116 | tags: [ danzi_lookup ] 117 | overwrite_comment: true 118 | enable_charset_filter: false 119 | enable_completion: true 120 | enable_encoder: false 121 | enable_sentence: false 122 | enable_user_dict: false 123 | encode_commit_history: false 124 | comment_format: 125 | - xform/ /, / 126 | - xform/^/〔/ 127 | - xform/$/〕/ 128 | 129 | custom_phrase: 130 | dictionary: "" 131 | user_dict: user_dict 132 | db_class: stabledb 133 | enable_sentence: false 134 | 135 | punctuator: 136 | import_preset: symbols 137 | 138 | key_binder: 139 | bindings: 140 | - { when: always, accept: Shift+space, select: .next } 141 | - { when: always, accept: Control+Alt+comma, toggle: full_shape } 142 | - { when: always, accept: Control+Alt+period, toggle: ascii_punct } 143 | - { when: has_menu, accept: "Control+slash", toggle: traditionalization } 144 | - { when: has_menu, accept: "Control+backslash", toggle: emoji_suggestion } 145 | - { when: composing, accept: KP_0, send: 0 } 146 | - { when: composing, accept: KP_1, send: 1 } 147 | - { when: composing, accept: KP_2, send: 2 } 148 | - { when: composing, accept: KP_3, send: 3 } 149 | - { when: composing, accept: KP_4, send: 4 } 150 | - { when: composing, accept: KP_5, send: 5 } 151 | - { when: composing, accept: KP_6, send: 6 } 152 | - { when: composing, accept: KP_7, send: 7 } 153 | - { when: composing, accept: KP_8, send: 8 } 154 | - { when: composing, accept: KP_9, send: 9 } 155 | - { when: composing, accept: KP_Add, send: plus } 156 | - { when: composing, accept: KP_Subtract, send: minus } 157 | - { when: composing, accept: KP_Multiply, send: asterisk } 158 | - { when: composing, accept: KP_Divide, send: slash } 159 | - { when: composing, accept: KP_Decimal, send: period } 160 | - { when: has_menu, accept: minus, send: Page_Up } 161 | - { when: has_menu, accept: equal, send: Page_Down } 162 | 163 | recognizer: 164 | import_preset: default 165 | patterns: 166 | danzi_lookup: "[a-z`]*`+[a-z`]*" 167 | punct: "^/([0-9]0?|[a-z]+)$" 168 | calc: "^=[^;']+$" 169 | unicode: "^uu[0-9a-f]*$" 170 | 171 | topup: 172 | __include: "layout/topup" 173 | min_length: 4 174 | max_length: 6 175 | auto_clear: true 176 | min_length_danzi: 2 177 | topup_command: true 178 | -------------------------------------------------------------------------------- /scripts/make_dicts.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Make Dicts 4 | # Copyright (C) 2023 Xuesong Peng 5 | 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU Affero General Public License as published 8 | # by the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU Affero General Public License for more details. 15 | 16 | # You should have received a copy of the GNU Affero General Public License 17 | # along with this program. If not, see . 18 | 19 | BASEDIR=$(dirname "$0") 20 | 21 | usage() { 22 | echo "" 23 | echo "Usage:" 24 | echo " $(basename $0) [options]" 25 | echo "" 26 | echo "Make Jiandao dicts." 27 | echo "" 28 | echo "Options:" 29 | echo " -a, --append the raw dict file to be appended" 30 | echo " -d, --delete the file of terms to be deleted" 31 | echo " -m, --modify the file of terms to be modified and their weight delta" 32 | echo " -r, --rawdict the raw dict file, default is \"${BASEDIR}/../dicts/cizu_raw.txt\"" 33 | echo " -v, --version the target version" 34 | echo " --deweight reduce the weight of 630 phrases" 35 | echo " --clean clean generated files and restore the raw dict" 36 | echo "" 37 | echo " -h, --help display this help" 38 | } 39 | 40 | RAWDICT_ORG="${BASEDIR}/../dicts/cizu_raw.txt" 41 | RAWDICT="${BASEDIR}/../dicts/cizu_raw_work.txt" 42 | OUTPUT="${BASEDIR}/../schema/jiandao.base.dict.yaml" 43 | XIAOXIAO="${BASEDIR}/../xiaoxiao/mb/jiandao.txt" 44 | VERSION="master" 45 | DEWEIGHT=0 46 | 47 | ARGS=$(getopt -o a:d:m:r:v:h --long append:,delete:,modify:,rawdict:,version:,deweight,clean,help -n "$(basename $0)" -- "$@") 48 | if [[ $? -ne 0 ]]; then 49 | usage 50 | exit 51 | fi 52 | 53 | eval set -- "${ARGS}" 54 | 55 | while true; do 56 | case "$1" in 57 | -a | --append ) 58 | APPEND=$2 59 | shift 2 60 | ;; 61 | -d | --delete ) 62 | DELETE=$2 63 | shift 2 64 | ;; 65 | -m | --modify ) 66 | MODIFY=$2 67 | shift 2 68 | ;; 69 | -r | --rawdict ) 70 | RAWDICT=$2 71 | shift 2 72 | ;; 73 | -v | --version ) 74 | VERSION=$2 75 | shift 2 76 | ;; 77 | --deweight ) 78 | DEWEIGHT=1 79 | shift 80 | ;; 81 | --clean ) 82 | rm -f ${BASEDIR}/../dicts/02.cizu.txt ${RAWDICT} $(dirname "${OUTPUT}")/*.dict.yaml temp.txt 83 | exit 84 | ;; 85 | -- ) 86 | shift 87 | break 88 | ;; 89 | * ) 90 | usage 91 | exit 92 | ;; 93 | esac 94 | done 95 | 96 | if [[ ! -f ${RAWDICT_ORG} ]]; then 97 | echo "${RAWDICT_ORG} does not exist." 98 | exit 99 | fi 100 | 101 | cp ${RAWDICT_ORG} ${RAWDICT} 102 | 103 | if [[ ! -f ${APPEND} ]]; then 104 | APPEND="" 105 | fi 106 | 107 | cat ${RAWDICT} ${APPEND} | awk '!seen[$1,$2]++' > temp.txt 108 | mv temp.txt ${RAWDICT} 109 | 110 | if [[ "${DEWEIGHT}" -eq 1 ]]; then 111 | awk -v OFS='\t' 'NR==FNR {map[$1]++; next} {if (!map[$1]) print $0; else print $1,$2,$3,10,$5,$6}' ${BASEDIR}/../dicts/06.630.txt ${RAWDICT} > temp.txt 112 | mv temp.txt ${RAWDICT} 113 | fi 114 | 115 | if [[ -f ${DELETE} ]]; then 116 | awk 'NR==FNR {map[$1,$2]++; next} {if (!map[$1,$2]) print $0}' ${DELETE} ${RAWDICT} > temp.txt 117 | mv temp.txt ${RAWDICT} 118 | fi 119 | 120 | if [[ -f ${MODIFY} ]]; then 121 | awk -v OFS='\t' 'NR==FNR {map[$1,$2] = $3; next} {print $1,$2,$3,$4+map[$1,$2],$5,$6}' ${MODIFY} ${RAWDICT} > temp.txt 122 | mv temp.txt ${RAWDICT} 123 | fi 124 | 125 | sort -k2,2 -k4,4nr -k5,5nr -k3,3 ${RAWDICT} > temp.txt 126 | mv temp.txt ${RAWDICT} 127 | 128 | python3 ${BASEDIR}/convert_raw_dict.py ${RAWDICT} | sort -k2 -s > ${BASEDIR}/../dicts/02.cizu.txt 129 | 130 | cat << EOF > ${OUTPUT} 131 | # Rime dictionary 132 | # encoding: utf-8 133 | --- 134 | name: jiandao.base 135 | version: ${VERSION} 136 | sort: original 137 | ... 138 | EOF 139 | 140 | cat ${BASEDIR}/../dicts/0*.txt >> ${OUTPUT} 141 | 142 | cat << EOF > $(dirname "${OUTPUT}")/jiandao.user.dict.yaml 143 | # Rime dictionary 144 | # encoding: utf-8 145 | --- 146 | name: jiandao.user 147 | version: ${VERSION} 148 | sort: original 149 | ... 150 | EOF 151 | 152 | cat << EOF > $(dirname "${OUTPUT}")/jiandao.dict.yaml 153 | # Rime dictionary 154 | # encoding: utf-8 155 | --- 156 | name: jiandao 157 | version: ${VERSION} 158 | sort: original 159 | use_preset_vocabulary: false 160 | import_tables: 161 | - jiandao.base 162 | - jiandao.user 163 | ... 164 | EOF 165 | 166 | cat << EOF > ${XIAOXIAO} 167 | encode=UTF-8 168 | name=🌟️星空键道 169 | key=zyxwvutsrqponmlkjihgfedcba 170 | len=6 171 | wildcard=] 172 | assist=\` mb/pinyin.txt 173 | user=mb/jiandao.user.txt 174 | [data] 175 | EOF 176 | 177 | awk -v FS='\t' -v OFS=' ' '{print $2,$1}' <(cat ${BASEDIR}/../dicts/01.danzi.txt | tr -d '\r') >> ${XIAOXIAO} 178 | awk -v FS='\t' -v OFS=' ' 'NR==FNR {map[$1] = $2; next} {if (!map[$1]) print $2,$1; else print $2,"$["$1"("map[$1]")]"$1}' ${BASEDIR}/../dicts/06.630.txt ${BASEDIR}/../dicts/02.cizu.txt >> ${XIAOXIAO} 179 | awk -v FS='\t' -v OFS=' ' '{print $2,$1}' <(cat ${BASEDIR}/../dicts/03.fuhao.txt | tr -d '\r') >> ${XIAOXIAO} 180 | awk -v FS='\t' -v OFS=' ' '{print $2,$1}' <(cat ${BASEDIR}/../dicts/04.buchong.txt | tr -d '\r') >> ${XIAOXIAO} 181 | awk -v FS='\t' -v OFS=' ' '{print $2,$1}' <(cat ${BASEDIR}/../dicts/06.630.txt | tr -d '\r') >> ${XIAOXIAO} 182 | cat ${BASEDIR}/../dicts/xiaoxiao.txt | tr -d '\r' >> ${XIAOXIAO} 183 | sed -i -e 's/\\n/$\//g' ${XIAOXIAO} 184 | sed -i -e 's/\\t/\t/g' ${XIAOXIAO} 185 | sed -i -e 's/\\\\/\\/g' ${XIAOXIAO} 186 | 187 | cat << EOF > $(dirname "${XIAOXIAO}")/jiandao.user.txt 188 | # 编码必须为 GB18030 189 | # 𮧵䶮 <- 此信息正确显示时编码大概率识别正确(不排除特殊情况) 190 | EOF 191 | 192 | iconv -f utf-8 -t gb18030 $(dirname "${XIAOXIAO}")/jiandao.user.txt -o temp.txt 193 | mv temp.txt $(dirname "${XIAOXIAO}")/jiandao.user.txt 194 | -------------------------------------------------------------------------------- /schema/lua/jiandao/calculator.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Calculator 3 | Copyright (C) 2020 thXnder 4 | 5 | xnumber.lua: realize a yong-style number typing experience in RIME 6 | usage: 7 | 0. this script is intended for xkjd6 but also work for other schemas (may need some custimizations) 8 | 1. place this script in `rime\lua` 9 | 2. modify `rime\rime.lua` by adding a line like `number_translator = require("numberx")` 10 | 3. modify your schema (like `xkjd6.schema.yaml`) by adding an item like `- lua_translator@number_translator` under the `engine/translators` section 11 | 4. re-deploy RIME and enjoy (the default trigger key is `=`) 12 | change log: 13 | v0.0.1(20201010) - initial version written by thXnder(别打脸) 14 | --]] 15 | 16 | local function speakLiterally(str, valMap) 17 | valMap = valMap or { 18 | [0]="零"; "一"; "二"; "三"; "四"; "五"; "六"; "七"; "八"; "九"; "十"; 19 | ["+"]="正"; ["-"]="负"; ["."]="点"; [""]="" 20 | } 21 | 22 | local tbOut = {} 23 | for k = 1, #str do 24 | local v = string.sub(str, k, k) 25 | v = tonumber(v) or v 26 | tbOut[k] = valMap[v] 27 | end 28 | return table.concat(tbOut) 29 | end 30 | 31 | local function speakMillitary(str) 32 | return speakLiterally(str, {[0]="洞"; "幺"; "两"; "三"; "四"; "五"; "六"; "拐"; "八"; "勾"; "十";["+"]="正"; ["-"]="负"; ["."]="点"; [""]=""}) 33 | end 34 | 35 | local function splitNumStr(str) 36 | --[[ 37 | split a number (or a string describing a number) into 4 parts: 38 | .sym: "+", "-" or "" 39 | .int: "0", "000", "123456", "", etc 40 | .dig: "." or "" 41 | .dec: "0", "10000", "00001", "", etc 42 | --]] 43 | local part = {} 44 | part.sym, part.int, part.dig, part.dec = string.match(str, "^([%+%-]?)(%d*)(%.?)(%d*)") 45 | return part 46 | end 47 | 48 | local function speakBar(str, posMap, valMap) 49 | posMap = posMap or {[1]="仟"; [2]="佰"; [3]="拾"; [4]=""} 50 | valMap = valMap or {[0]="零"; "一"; "二"; "三" ;"四"; "五"; "六"; "七"; "八"; "九"} -- the length of valMap[0] should not excess 1 51 | 52 | local out = "" 53 | local bar = string.sub("****" .. str, -4, -1) -- the integer part of a number string can be divided into bars; each bar has 4 bits 54 | for pos = 1, 4 do 55 | local val = tonumber(string.sub(bar, pos, pos)) 56 | -- case1: place holder 57 | if val == nil then 58 | goto continue 59 | end 60 | -- case2: number 1~9 61 | if val > 0 then 62 | out = out .. valMap[val] .. posMap[pos] 63 | goto continue 64 | end 65 | -- case3: number 0 66 | local valNext = tonumber(string.sub(bar, pos+1, pos+1)) 67 | if ( valNext==nil or valNext==0 )then 68 | goto continue 69 | else 70 | out = out .. valMap[0] 71 | goto continue 72 | end 73 | ::continue:: 74 | end 75 | if out == "" then out = valMap[0] end 76 | return out 77 | end 78 | 79 | local function speakIntOfficially(str, posMap, valMap) 80 | posMap = posMap or {[1]="千"; [2]="百"; [3]="十"; [4]=""} 81 | valMap = valMap or {[0]="零"; "一"; "二"; "三" ;"四"; "五"; "六"; "七"; "八"; "九"} -- the length of valMap[0] should not excess 1 82 | 83 | -- split the number string into bars, for example, in:str=123456789 → out:tbBar={1|2345|6789} 84 | local int = string.match(str, "^0*(%d+)$") 85 | if int=="" then int = "0" end 86 | local remain = #int % 4 87 | if remain==0 then remain = 4 end 88 | local tbBar = {[1] = string.sub(int, 1, remain)} 89 | for pos = remain+1, #int, 4 do 90 | local bar = string.sub(int, pos, pos+3) 91 | table.insert(tbBar, bar) 92 | end 93 | -- generate the suffixes of each bar, for example, tbSpeakBarSuffix={亿|万|""} 94 | local tbSpeakBarSuffix = {[1]=""} 95 | for iBar = 2, #tbBar do 96 | local suffix = (iBar % 2 == 0) and ("万"..tbSpeakBarSuffix[1]) or ("亿"..tbSpeakBarSuffix[2]) 97 | table.insert(tbSpeakBarSuffix, 1, suffix) 98 | end 99 | -- speak each bar 100 | local tbSpeakBar = {} 101 | for k = 1, #tbBar do 102 | tbSpeakBar[k] = speakBar(tbBar[k], posMap, valMap) 103 | end 104 | -- combine the results 105 | local out = "" 106 | for k = 1, #tbBar do 107 | local speakBar = tbSpeakBar[k] 108 | if speakBar ~= valMap[0] then 109 | out = out .. speakBar .. tbSpeakBarSuffix[k] 110 | end 111 | end 112 | if out == "" then out = valMap[0] end 113 | return out 114 | end 115 | 116 | local function speakDecMoney(str, posMap, valMap) 117 | posMap = posMap or {[1]="角"; [2]="分"; [3]="厘"; [4]="毫"} 118 | valMap = valMap or {[0]="零"; "壹"; "贰"; "叁" ;"肆"; "伍"; "陆"; "柒"; "捌"; "玖"} -- the length of valMap[0] should not excess 1 119 | 120 | local dec = string.sub(str, 1, 4) 121 | dec = string.gsub(dec, "0*$", "") 122 | if dec == "" then 123 | return "整" 124 | end 125 | 126 | local out = "" 127 | for pos = 1, #dec do 128 | local val = tonumber(string.sub(dec, pos, pos)) 129 | out = out .. valMap[val] .. posMap[pos] 130 | end 131 | return out 132 | end 133 | 134 | local function speakOfficially(str) 135 | local part = splitNumStr(str) 136 | local speakSym = speakLiterally(part.sym) 137 | local speakInt = speakIntOfficially(part.int) 138 | local speakDig = speakLiterally(part.dig) 139 | local speakDec = speakLiterally(part.dec) 140 | local out = speakSym .. speakInt .. speakDig .. speakDec 141 | return out 142 | end 143 | 144 | local function speakMoney(str) 145 | local part = splitNumStr(str) 146 | local speakSym = speakLiterally(part.sym) 147 | local speakInt = speakIntOfficially(part.int, {[1]="仟"; [2]="佰"; [3]="拾"; [4]=""}, {[0]="零"; "壹"; "贰"; "叁" ;"肆"; "伍"; "陆"; "柒"; "捌"; "玖"}) .. "元" 148 | local speakDec = speakDecMoney(part.dec) 149 | local out = speakSym .. speakInt .. speakDec 150 | return out 151 | end 152 | 153 | local function baseConverse(str, from, to) 154 | local str10 = str 155 | if from == 16 then 156 | str10 = string.format("%d", str) 157 | end 158 | local strout = str10 159 | if to == 16 then 160 | strout = string.format("%#x", str10) 161 | end 162 | return strout 163 | end 164 | 165 | local function translator(input, seg, env) 166 | -- env can be used for getting the state of a switch, e.g., `env.engine.context:get_option("jffh")` returns true/false (or nil if the switch does not exist) 167 | if string.sub(input, 1, 1) == "=" then 168 | local input2 = string.sub(input, 2) 169 | if string.match(input2, "^[%+%-]?%d*%.?%d*$") then -- sadly, lua does not support regex like {0,4} 170 | -- comment or reorder following lines to adjust the effects 171 | yield(Candidate("number", seg.start, seg._end, speakMoney(input2), " 金额")) 172 | yield(Candidate("number", seg.start, seg._end, speakOfficially(input2), " 文读")) 173 | yield(Candidate("number", seg.start, seg._end, speakLiterally(input2), " 冷读")) 174 | yield(Candidate("number", seg.start, seg._end, speakMillitary(input2), " 军语")) 175 | else 176 | local ok, ret = pcall(load, "return "..input2) -- from Lua 5.3, the `loadstring` function is replaced by `load` 177 | if ok then yield(Candidate("number", seg.start, seg._end, tostring(ret()), " 计算")) end 178 | end 179 | if string.match(input2, "^[%+%-]?%d*$") then -- plz, i dont want to deal with base conversion with decimals 180 | yield(Candidate("number", seg.start, seg._end, baseConverse(input2, 10, 16), " 进制")) 181 | end 182 | end 183 | end 184 | 185 | return translator -------------------------------------------------------------------------------- /dicts/06.630.txt: -------------------------------------------------------------------------------- 1 | 不能 ba 2 | 班级 baa 3 | 不了 bai 4 | 宝贝 bao 5 | 不好 bau 6 | 不敢 bav 7 | 不但 bi 8 | 不见 bia 9 | 别人 bii 10 | 不错 bio 11 | 不少 biu 12 | 不会 biv 13 | 不是 bo 14 | 不让 boa 15 | 便是 boi 16 | 表情 boo 17 | 不断 bou 18 | 毕竟 bov 19 | 必须 bu 20 | 不用 bua 21 | 别的 bui 22 | 爸爸 buo 23 | 变得 buu 24 | 不知 buv 25 | 不过 bv 26 | 不到 bva 27 | 不想 bvi 28 | 本来 bvo 29 | 变成 bvu 30 | 不禁 bvv 31 | 才能 ca 32 | 曾经 caa 33 | 村子 cai 34 | 沧桑 cao 35 | 参加 cau 36 | 村民 cav 37 | 操作 ci 38 | 村里 cia 39 | 此人 cii 40 | 催促 cio 41 | 从小 ciu 42 | 从此 civ 43 | 此时 co 44 | 测试 coa 45 | 才是 coi 46 | 匆忙 coo 47 | 从前 cou 48 | 此刻 cov 49 | 采用 cu 50 | 匆匆 cua 51 | 苍白 cui 52 | 苍老 cuo 53 | 厕所 cuu 54 | 村长 cuv 55 | 存在 cv 56 | 参与 cva 57 | 从事 cvi 58 | 从来 cvo 59 | 才有 cvu 60 | 从未 cvv 61 | 到了 da 62 | 大约 daa 63 | 肚子 dai 64 | 都能 dao 65 | 打架 dau 66 | 当即 dav 67 | 多少 di 68 | 当中 dia 69 | 大人 dii 70 | 短信 dio 71 | 动作 diu 72 | 地上 div 73 | 但是 do 74 | 的话 doa 75 | 都是 doi 76 | 大家 doo 77 | 弟弟 dou 78 | 地方 dov 79 | 当然 du 80 | 多么 dua 81 | 独自 dui 82 | 大爷 duo 83 | 等待 duu 84 | 打算 duv 85 | 东西 dv 86 | 得到 dva 87 | 底下 dvi 88 | 大哥 dvo 89 | 对面 dvu 90 | 对于 dvv 91 | 生活 ea 92 | 视线 eaa 93 | 身子 eai 94 | 深深 eao 95 | 身边 eau 96 | 手臂 eav 97 | 时候 ei 98 | 世界 eia 99 | 是从 eii 100 | 时光 eio 101 | 双手 eiu 102 | 身上 eiv 103 | 时间 eo 104 | 说话 eoa 105 | 瞬间 eoi 106 | 事情 eoo 107 | 说着 eou 108 | 声音 eov 109 | 什么 eu 110 | 舒服 eua 111 | 似的 eui 112 | 十分 euo 113 | 身后 euu 114 | 少年 euv 115 | 上面 ev 116 | 甚至 eva 117 | 剩下 evi 118 | 上来 evo 119 | 手机 evu 120 | 属于 evv 121 | 只能 fa 122 | 纷纷 faa 123 | 房子 fai 124 | 否则 fao 125 | 只好 fau 126 | 发展 fav 127 | 这个 fi 128 | 这里 fia 129 | 专业 fii 130 | 非常 fio 131 | 直接 fiu 132 | 这些 fiv 133 | 知道 fo 134 | 放心 foa 135 | 只是 foi 136 | 放学 foo 137 | 之前 fou 138 | 放弃 fov 139 | 这么 fu 140 | 疯狂 fua 141 | 转身 fui 142 | 中考 fuo 143 | 之后 fuu 144 | 这种 fuv 145 | 这样 fv 146 | 找到 fva 147 | 只要 fvi 148 | 发起 fvo 149 | 只有 fvu 150 | 发现 fvv 151 | 更加 ga 152 | 高级 gaa 153 | 国际 gai 154 | 关注 gao 155 | 姑娘 gau 156 | 公司 gav 157 | 工作 gi 158 | 刚刚 gia 159 | 赶紧 gii 160 | 各位 gio 161 | 高手 giu 162 | 关上 giv 163 | 感觉 go 164 | 告诉 goa 165 | 更是 goi 166 | 国家 goo 167 | 跟着 gou 168 | 改变 gov 169 | 关系 gu 170 | 果然 gua 171 | 各自 gui 172 | 感受 guo 173 | 过后 guu 174 | 各种 guv 175 | 过去 gv 176 | 感到 gva 177 | 根本 gvi 178 | 过来 gvo 179 | 尴尬 gvu 180 | 关于 gvv 181 | 还没 ha 182 | 缓缓 haa 183 | 孩子 hai 184 | 还能 hao 185 | 还好 hau 186 | 喝酒 hav 187 | 好像 hi 188 | 后果 hia 189 | 好人 hii 190 | 黄金 hio 191 | 好看 hiu 192 | 还会 hiv 193 | 还是 ho 194 | 或许 hoa 195 | 哈哈 hoi 196 | 回家 hoo 197 | 火焰 hou 198 | 呵呵 hov 199 | 好的 hu 200 | 很多 hua 201 | 浑身 hui 202 | 或者 huo 203 | 获得 huu 204 | 回答 huv 205 | 还有 hv 206 | 回到 hva 207 | 还要 hvi 208 | 回来 hvo 209 | 后面 hvu 210 | 活动 hvv 211 | 继续 ja 212 | 成绩 jaa 213 | 除了 jai 214 | 绝对 jao 215 | 姐姐 jau 216 | 渐渐 jav 217 | 几个 ji 218 | 结果 jia 219 | 紧紧 jii 220 | 经常 jio 221 | 坚持 jiu 222 | 机会 jiv 223 | 就是 jo 224 | 惊讶 joa 225 | 出门 joi 226 | 教室 joo 227 | 成为 jou 228 | 城市 jov 229 | 几乎 ju 230 | 竟然 jua 231 | 阶段 jui 232 | 进入 juo 233 | 觉得 juu 234 | 就算 juv 235 | 今天 jv 236 | 见到 jva 237 | 就要 jvi 238 | 出来 jvo 239 | 见面 jvu 240 | 出现 jvv 241 | 可以 ka 242 | 口水 kaa 243 | 看出 kai 244 | 可能 kao 245 | 开始 kau 246 | 夸张 kav 247 | 况且 ki 248 | 看见 kia 249 | 刻苦 kii 250 | 块钱 kio 251 | 科技 kiu 252 | 快点 kiv 253 | 可是 ko 254 | 开心 koa 255 | 空间 koi 256 | 肯定 koo 257 | 看着 kou 258 | 渴望 kov 259 | 可爱 ku 260 | 快乐 kua 261 | 空白 kui 262 | 开支 kuo 263 | 靠近 kuu 264 | 空气 kuv 265 | 开车 kv 266 | 看到 kva 267 | 快速 kvi 268 | 看来 kvo 269 | 客厅 kvu 270 | 苦于 kvv 271 | 例如 la 272 | 立马 laa 273 | 露出 lai 274 | 练习 lao 275 | 老妈 lau 276 | 立即 lav 277 | 两个 li 278 | 类似 lia 279 | 老人 lii 280 | 两位 lio 281 | 老师 liu 282 | 脸上 liv 283 | 老是 lo 284 | 来说 loa 285 | 力量 loi 286 | 厉害 loo 287 | 两只 lou 288 | 立刻 lov 289 | 了解 lu 290 | 联系 lua 291 | 来自 lui 292 | 老爸 luo 293 | 懒得 luu 294 | 力气 luv 295 | 里面 lv 296 | 来到 lva 297 | 留下 lvi 298 | 离去 lvo 299 | 老板 lvu 300 | 离开 lvv 301 | 妈妈 ma 302 | 梦乡 maa 303 | 妹子 mai 304 | 面对 mao 305 | 美女 mau 306 | 勉强 mav 307 | 每个 mi 308 | 默默 mia 309 | 某个 mii 310 | 目光 mio 311 | 摸摸 miu 312 | 马上 miv 313 | 目前 mo 314 | 名叫 moa 315 | 明显 moi 316 | 慢慢 moo 317 | 面前 mou 318 | 母亲 mov 319 | 明白 mu 320 | 门外 mua 321 | 满脸 mui 322 | 摸索 muo 323 | 矛盾 muu 324 | 陌生 muv 325 | 没有 mv 326 | 密切 mva 327 | 没事 mvi 328 | 模样 mvo 329 | 忙碌 mvu 330 | 每天 mvv 331 | 能力 na 332 | 年纪 naa 333 | 女孩 nai 334 | 难以 nao 335 | 你好 nau 336 | 农民 nav 337 | 你们 ni 338 | 哪里 nia 339 | 那个 nii 340 | 那位 nio 341 | 难看 niu 342 | 那些 niv 343 | 难道 no 344 | 内心 noa 345 | 那是 noi 346 | 内容 noo 347 | 怒火 nou 348 | 内部 nov 349 | 那么 nu 350 | 能够 nua 351 | 你的 nui 352 | 难受 nuo 353 | 难得 nuu 354 | 那种 nuv 355 | 那样 nv 356 | 年轻 nva 357 | 难过 nvi 358 | 拿来 nvo 359 | 女友 nvu 360 | 那天 nvv 361 | 普通 pa 362 | 婆婆 paa 363 | 胖子 pai 364 | 平淡 pao 365 | 旁边 pau 366 | 啤酒 pav 367 | 配合 pi 368 | 苹果 pia 369 | 评价 pii 370 | 平常 pio 371 | 拍拍 piu 372 | 拼命 piv 373 | 漂亮 po 374 | 评论 poa 375 | 平日 poi 376 | 凭空 poo 377 | 判断 pou 378 | 片刻 pov 379 | 品质 pu 380 | 平凡 pua 381 | 品牌 pui 382 | 平分 puo 383 | 屁股 puu 384 | 皮肤 puv 385 | 朋友 pv 386 | 跑到 pva 387 | 皮鞋 pvi 388 | 破坏 pvo 389 | 趴在 pvu 390 | 平静 pvv 391 | 正好 qa 392 | 情绪 qaa 393 | 妻子 qai 394 | 前台 qao 395 | 强忍 qau 396 | 逐渐 qav 397 | 其他 qi 398 | 其中 qia 399 | 整个 qii 400 | 正常 qio 401 | 主任 qiu 402 | 其余 qiv 403 | 其实 qo 404 | 注视 qoa 405 | 真是 qoi 406 | 确实 qoo 407 | 正义 qou 408 | 情况 qov 409 | 准备 qu 410 | 欺负 qua 411 | 真的 qui 412 | 全都 quo 413 | 期待 quu 414 | 青年 quv 415 | 起来 qv 416 | 轻轻 qva 417 | 真正 qvi 418 | 前来 qvo 419 | 正在 qvu 420 | 清楚 qvv 421 | 人民 ra 422 | 热水 raa 423 | 日子 rai 424 | 人流 rao 425 | 人潮 rau 426 | 人群 rav 427 | 如果 ri 428 | 如同 ria 429 | 人人 rii 430 | 如今 rio 431 | 软件 riu 432 | 任何 riv 433 | 认为 ro 434 | 认识 roa 435 | 容易 roi 436 | 人家 roo 437 | 人类 rou 438 | 如意 rov 439 | 然后 ru 440 | 仍然 rua 441 | 热血 rui 442 | 认真 ruo 443 | 日后 ruu 444 | 人生 ruv 445 | 然而 rv 446 | 柔软 rva 447 | 人才 rvi 448 | 认可 rvo 449 | 偌大 rvu 450 | 让开 rvv 451 | 所以 sa 452 | 送给 saa 453 | 算了 sai 454 | 三流 sao 455 | 散发 sau 456 | 随即 sav 457 | 三个 si 458 | 三岁 sia 459 | 四个 sii 460 | 思念 sio 461 | 随手 siu 462 | 宿舍 siv 463 | 随着 so 464 | 所谓 soa 465 | 算是 soi 466 | 索性 soo 467 | 岁数 sou 468 | 速度 sov 469 | 虽然 su 470 | 四周 sua 471 | 碎片 sui 472 | 似乎 suo 473 | 随后 suu 474 | 三年 suv 475 | 所有 sv 476 | 送到 sva 477 | 苏醒 svi 478 | 送来 svo 479 | 司机 svu 480 | 三天 svv 481 | 提出 ta 482 | 通红 taa 483 | 太阳 tai 484 | 天赋 tao 485 | 头发 tau 486 | 唾沫 tav 487 | 他们 ti 488 | 听见 tia 489 | 痛苦 tii 490 | 她们 tio 491 | 条件 tiu 492 | 停止 tiv 493 | 特别 to 494 | 听说 toa 495 | 同时 toi 496 | 天空 too 497 | 听着 tou 498 | 同意 tov 499 | 他的 tu 500 | 突然 tua 501 | 叹息 tui 502 | 头脑 tuo 503 | 体质 tuu 504 | 通知 tuv 505 | 天天 tv 506 | 听到 tva 507 | 通过 tvi 508 | 同样 tvo 509 | 讨厌 tvu 510 | 推开 tvv 511 | 为了 wa 512 | 网络 waa 513 | 充满 wai 514 | 温柔 wao 515 | 无力 wau 516 | 无法 wav 517 | 我们 wi 518 | 位置 wia 519 | 五个 wii 520 | 微信 wio 521 | 文化 wiu 522 | 晚上 wiv 523 | 问题 wo 524 | 忘记 woa 525 | 温暖 woi 526 | 晚安 woo 527 | 完美 wou 528 | 闻言 wov 529 | 我的 wu 530 | 吃饭 wua 531 | 冲向 wui 532 | 无辜 wuo 533 | 微微 wuu 534 | 微笑 wuv 535 | 完成 wv 536 | 无比 wva 537 | 无聊 wvi 538 | 未来 wvo 539 | 外面 wvu 540 | 唯一 wvv 541 | 喜欢 xa 542 | 系统 xaa 543 | 小子 xai 544 | 学习 xao 545 | 小姐 xau 546 | 而已 xav 547 | 而且 xi 548 | 心里 xia 549 | 二人 xii 550 | 相信 xio 551 | 选择 xiu 552 | 安全 xiv 553 | 而是 xo 554 | 谢谢 xoa 555 | 像是 xoi 556 | 心情 xoo 557 | 想着 xou 558 | 希望 xov 559 | 许多 xu 560 | 想象 xua 561 | 休息 xui 562 | 享受 xuo 563 | 显得 xuu 564 | 下午 xuv 565 | 现在 xv 566 | 想到 xva 567 | 需要 xvi 568 | 下来 xvo 569 | 兴奋 xvu 570 | 安静 xvv 571 | 已经 ya 572 | 一丝 yaa 573 | 样子 yai 574 | 游戏 yao 575 | 一边 yau 576 | 一张 yav 577 | 一个 yi 578 | 眼睛 yia 579 | 一幕 yii 580 | 一位 yio 581 | 一把 yiu 582 | 有些 yiv 583 | 因为 yo 584 | 应该 yoa 585 | 也是 yoi 586 | 一定 yoo 587 | 以前 you 588 | 一次 yov 589 | 以后 yu 590 | 一句 yua 591 | 有的 yui 592 | 一直 yuo 593 | 一般 yuu 594 | 一种 yuv 595 | 一样 yv 596 | 一切 yva 597 | 一下 yvi 598 | 一起 yvo 599 | 拥有 yvu 600 | 一天 yvv 601 | 自己 za 602 | 最终 zaa 603 | 走出 zai 604 | 足以 zao 605 | 最好 zau 606 | 早已 zav 607 | 暂且 zi 608 | 再见 zia 609 | 自从 zii 610 | 咱们 zio 611 | 左手 ziu 612 | 早上 ziv 613 | 总是 zo 614 | 再说 zoa 615 | 暂时 zoi 616 | 在家 zoo 617 | 作为 zou 618 | 最新 zov 619 | 怎么 zu 620 | 自然 zua 621 | 走向 zui 622 | 作者 zuo 623 | 最后 zuu 624 | 总算 zuv 625 | 怎样 zv 626 | 做到 zva 627 | 坐下 zvi 628 | 走来 zvo 629 | 坐在 zvu 630 | 走进 zvv 631 | -------------------------------------------------------------------------------- /scripts/installer.bat: -------------------------------------------------------------------------------- 1 | <# : 2 | @echo off 3 | rem PowerShell code inside batch file 4 | rem https://stackoverflow.com/a/57572270 5 | rem Hide CMD window 6 | rem https://stackoverflow.com/a/507372 7 | start /b powershell /windowstyle hidden /nologo /noprofile /command ^ 8 | "&{[ScriptBlock]::Create((cat """%~f0""") -join [Char[]]10).Invoke(@(&{$args}%*))}" 9 | exit /b 10 | #> 11 | 12 | # Installer for Weasel 13 | # Copyright (C) 2023 Xuesong Peng 14 | 15 | # This program is free software: you can redistribute it and/or modify 16 | # it under the terms of the GNU Affero General Public License as published 17 | # by the Free Software Foundation, either version 3 of the License, or 18 | # (at your option) any later version. 19 | 20 | # This program is distributed in the hope that it will be useful, 21 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 22 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 23 | # GNU Affero General Public License for more details. 24 | 25 | # You should have received a copy of the GNU Affero General Public License 26 | # along with this program. If not, see . 27 | 28 | function Get-RimeUserDir { 29 | $dir = "" 30 | $registry_root = "HKCU:\SOFTWARE\Rime\Weasel" 31 | if (Test-Path -Path $registry_root) { 32 | $dir = (Get-ItemProperty -Path $registry_root).RimeUserDir 33 | } 34 | if (!$dir) { 35 | $dir = "$Env:APPDATA\Rime" 36 | } 37 | 38 | return $dir 39 | } 40 | 41 | function Get-WeaselRoot { 42 | $registry_root = if ([Environment]::Is64BitOperatingSystem) { 43 | "HKLM:\SOFTWARE\WOW6432Node\Rime\Weasel" 44 | } else { 45 | "HKLM:\SOFTWARE\Rime\Weasel" 46 | } 47 | if (Test-Path -Path $registry_root) { 48 | return (Get-ItemProperty -Path $registry_root).WeaselRoot 49 | } else { 50 | return "" 51 | } 52 | } 53 | 54 | function Get-DownloadUrl { 55 | param( 56 | [string]$Owner = "amorphobia", 57 | [string]$Repo = "rime-jiandao", 58 | [switch]$Gitee 59 | ) 60 | $query_url = if ($Gitee) { 61 | "https://gitee.com/api/v5/repos/$Owner/$Repo/releases/latest" 62 | } else { 63 | "https://api.github.com/repos/$Owner/$Repo/releases/latest" 64 | } 65 | $tag = (Invoke-WebRequest $query_url | ConvertFrom-Json).tag_name 66 | $zip = "jiandao-$tag.zip" 67 | 68 | if ($Gitee) { 69 | return "https://gitee.com/$Owner/$Repo/releases/download/$tag/$zip" 70 | } else { 71 | return "https://github.com/$Owner/$Repo/releases/download/$tag/$zip" 72 | } 73 | } 74 | 75 | function Start-Deployment { 76 | param ( 77 | [switch]$Deploy 78 | ) 79 | $dir = Get-WeaselRoot 80 | if ($Deploy) { 81 | $opt = "/deploy" 82 | } 83 | if ($dir -and (Test-Path "$dir\WeaselDeployer.exe")) { 84 | & "$dir\WeaselDeployer.exe" $opt 85 | return $true 86 | } else { 87 | return $false 88 | } 89 | } 90 | 91 | function Get-GuiXAML { 92 | [xml]$XAML = @" 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 221 |
223 |
RIME Jiandao Installer for Hamster 224 | Copyright (C) 2023, 2024 Xuesong Peng <pengxuesong.cn@gmail.com> 225 | 226 | This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 227 | 228 | This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. 229 | 230 | You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
231 |
233 |
⚠️注意⚠️ 234 | 235 | 运行前: 236 | 237 | ❗️需要安装仓输入法,且新版本的仓输入法才能自动重新部署 238 | ❗️请根据提示选择仓输入法的顶层目录 239 | 240 | 运行过程中: 241 | 242 | ❗️需要授权此快捷指令访问相应网址才能下载键道方案 243 | ❗️需要授权此快捷指令访问仓输入法目录才能储存方案文件 244 | ❗️需要授权此快捷指令运行仓输入法提供的指令才能自动重新部署
245 | 247 |
249 |
251 |
标题
:
未设置仓输入法目录
252 |
254 |
模式
:
文件夹
255 | 257 |
259 |
261 |
[GitHub, 262 | Gitee]
263 |
265 |
提示
:
请选择下载源
266 |
268 |
[1. 覆盖用户配置(default.custom.yaml), 269 | 2. 覆盖用户词典(jiandao.user.dict.yaml), 270 | 3. 同时覆盖两者, 271 | 4. 两者均不覆盖]
272 |
274 |
提示
:
请选择覆盖方式
275 |
277 |
279 |
https://api.github.com/repos/amorphobia/rime-jiandao/releases/latest
280 |
282 |
284 |
https://gitee.com/api/v5/repos/amorphobia/rime-jiandao/releases/latest
285 | 287 |
289 |
291 |
293 |
295 |
297 |
https://github.com/amorphobia/rime-jiandao/releases/download/[19 标签]/jiandao-[19 标签].zip
298 |
300 |
302 |
https://gitee.com/amorphobia/rime-jiandao/releases/download/[19 标签]/jiandao-[19 标签].zip
303 | 305 |
307 |
309 |
311 |
313 |
315 |
317 |
319 |
321 |
323 |
325 |
327 |
329 |
331 |
333 |
335 |
337 |
路径
:
[仓输入法目录]
338 |
未找到时报错
:
339 |
341 |
343 |
345 |
347 |
349 |
351 |
353 |
355 |
357 |
条件
:
名称 不是 jiandao.user.dict
358 | 360 |
362 |
文件夹
:
[仓输入法目录]
363 |
询问储存位置
:
364 |
如果文件存在则覆盖
:
365 |
子路径
:
/Rime
366 |
368 |
路径
:
[仓输入法目录]
369 |
未找到时报错
:
370 |
372 |
374 |
376 |
378 |
380 |
382 |
patch: 383 | schema_list: 384 | - schema: jiandao
385 |
387 |
文件夹
:
[仓输入法目录]
388 |
询问储存位置
:
389 |
如果文件存在则覆盖
:
390 |
子路径
:
/Rime/default.custom.yaml
391 |
393 |
395 | 397 | -------------------------------------------------------------------------------- /dicts/cizu_append.txt.in: -------------------------------------------------------------------------------- 1 | 不不不 bbb vvv 950 2 | 北滨路 bbl iao 950 3 | 绷不住 bbq avi 950 4 | 北碚区 bbq ivv 850 5 | 标日 bcrk vo 1050 6 | 标音 bcyb vo 950 7 | 不搭理 bdl viv 950 8 | 北斗七星 bdqx io 1050 9 | 璧山区 beq aiv 950 10 | 百视通 bet voa 950 11 | 半浊点 bfd oai 950 12 | 亳州市 bfe ooo 850 13 | 不直观 bfg vua 950 14 | 八周年 bfn uuu 1050 15 | 八周岁 bfs uui 950 16 | 半形 bfxg ov 850 17 | 兵棋 bgqk uv 950 18 | 八个人 bgr uii 950 19 | 兵推 bgtb ui 950 20 | 拜登 bhdr ia 950 21 | 白键 bhjm ui 850 22 | 八号口 bhk uoo 950 23 | 百联 bhlm vv 950 24 | 八号线 bhx uoa 950 25 | 不报 bjbz vi 750 1 #六码次选 26 | 不丹 bjdf vu 850 27 | 半截沟 bjg oua 950 28 | 碧津公园 bjgy va 950 29 | 不搞 bjgz vi 950 30 | 碧津湖 bjh vaa 950 31 | 不困 bjkw vi 1050 32 | 不认 bjrn vo 950 33 | 白𬶨豚 bjt uau 950 34 | 碧津塔 bjt vav 950 35 | 不穿 bjwt vo 850 36 | 璧山 bkef ai 1050 37 | 碧津 bkjb va 950 38 | 不可行 bkx vvu 850 39 | 变到 bmdz ov 850 40 | 白毛女 bmn uua 950 41 | 变难 bmnf oa 1050 42 | 百脑汇 bnh vua 1050 43 | 畚箕 bnjk au 950 44 | 巴南区 bnq auv 950 45 | 表情符号 bqfh vo 1050 46 | 标准库 bqk voo 950 47 | 不起作用 bqzy vv 1050 48 | 八人份 brf uii 950 49 | 布热津斯基 brjj vi 850 50 | 八笔 bsbk uu 950 51 | 罢葛 bsge ii 850 52 | 八号 bshz uo 1050 53 | 巴南 bsnf au 1050 54 | 八人 bsrn ui 950 55 | 八筒 bsty uu 1050 56 | 巴县 bsxm ai 950 57 | 玻色子 bsz vua 950 58 | 步坦协同 btxt iv 1050 59 | 北碚 bwbw iv 950 60 | 北蔡 bwch ii 1050 61 | 北生 bwer iu 850 1 北京生物 62 | 贝亲 bwqb ao 1050 63 | 被墙 bwqx ov 1050 64 | 不信任 bxr vii 950 65 | 冰箱贴 bxt oua 950 66 | 不协调 bxt vuo 950 67 | 白矮星 bxx uuo 950 68 | 编译原理 byyl ao 950 69 | 爆汁 bzfk oa 950 70 | 保种 bzfy iu 950 71 | 保利 bzlk iu 950 72 | 暴胀 bzqp ou 850 73 | 踩到底 cdd ovo 950 74 | 仓输入法 cerf iv 1050 75 | 侧载 cezh iu 1050 76 | 餐补 cfbj io 1050 77 | 词法单元 cfdy oa 850 78 | 词法分析 cffx oa 950 79 | 彩虹表 chb uiv 950 80 | 菜逼 chbk iv 950 81 | 漕河泾 chj aaa 950 82 | 彩虹色 chs uiu 1050 83 | 词法 ckfs oa 950 84 | 词头 cktd oo 950 85 | 撮箕 cljk iu 950 86 | 才能有 cny vav 1050 87 | 磁偏角 cpj viu 1050 88 | 瓷器口 cqk ooo 950 89 | 打补丁 dbd iov 950 90 | 对哈 dbhs ao 1050 91 | 大暴雨 dby vov 850 92 | 带不走 dbz vvv 950 93 | 大词典 dcd voi 950 94 | 调货 dchl oi 1050 95 | 打错了 dcl iia 950 96 | 大聪明 dcm vvo 950 97 | 鲷鱼 dcyl uu 950 98 | 低地板 ddb ivv 950 99 | 对对对 ddd aaa 950 100 | 多对多 ddd uau 850 101 | 大都会 ddh vui 850 102 | 大渡口 ddk vao 950 103 | 大渡口区 ddkq va 1050 104 | 低代码 ddm iiv 950 105 | 多对一 ddy uav 950 106 | 第十八 deb uuu 850 107 | 大石坝 deb vvv 850 108 | 第十八次 debc uu 950 109 | 第十次 dec uuo 950 110 | 滴水湖 deh aaa 950 111 | 第十九 dej uuu 850 112 | 大世界 dej vvi 850 113 | 第十九次 dejc uu 1050 114 | 第十六 del uuo 950 115 | 等勺流 del uua 850 116 | 第十六次 delc uu 850 117 | 第十七 deq uuv 850 118 | 都市圈 deq uoi 750 119 | 第十七次 deqc uu 1050 120 | 第十三 des uuv 950 121 | 第十四 des uui 850 122 | 第十三次 desc uu 1050 123 | 第十四次 desc uu 950 124 | 第十五 dew uuv 950 125 | 第十五次 dewc uu 1050 126 | 第十二 dex uuv 950 127 | 第十二次 dexc uu 1050 128 | 第十一 dey uuv 950 129 | 第十一次 deyc uu 1050 130 | 东方康德家园 dfky vo 1050 131 | 东风破 dfp vuv 950 132 | 东方体育中心 dftx vo 1050 133 | 大侄子 dfz via 950 134 | 大殖子 dfz vva 850 135 | 带货 dhhl vi 1050 136 | 戴好 dhhz ua 950 137 | 订好了 dhl oaa 950 138 | 定好了 dhl oaa 850 139 | 带回去 dhq viv 950 140 | 代位 dhww ii 950 141 | 第九次 djc uuo 850 142 | 赌输 djej av 950 143 | 东昌路 djl voo 950 144 | 大长腿 djt vuu 950 145 | 对称性 djx auo 850 146 | 垫江县 djx iai 850 147 | 犊子 djzk ua 850 148 | 大括号 dkh vio 950 149 | 地精 dkjg vo 950 150 | 迪卡侬 dkn iii 950 151 | 低重 dkwy iu 950 152 | 第六次 dlc uoo 950 153 | 冬令时 dle uio 950 154 | 狄拉克 dlk uiu 950 155 | 多写 dlxd uo 850 156 | 点厾 dmdj ia 950 157 | 垫江 dmjx ia 1050 158 | 东明路 dml voo 950 159 | 电骡 dmll ia 1050 160 | 代码页 dmy ivv 950 161 | 打扑鼾 dph iiu 950 162 | 氹仔 dpzh ai 950 163 | 第七次 dqc uvo 950 164 | 大竹林 dql vuv 950 165 | 单人单管 drdg oi 850 166 | 等勺 drez uu 1050 167 | 第四次 dsc uio 950 168 | 大数 dsej vo 750 1 #六码次选 169 | 打上 dsep ii 750 1 #六码次选 170 | 大傻 dses vi 950 171 | 打肿 dsfy iu 850 172 | 大疆 dsjx va 850 1 #六码次选 173 | 哒咩 dsmd oo 950 174 | 大坪 dspg vv 850 175 | 大天狗 dtg vvu 950 176 | 动态库 dtk vvo 950 177 | 断签 dtqm ou 950 178 | 独体字 dtz uio 950 179 | 得把 dwbs ui 1050 180 | 大差不差 dwbw vo 1050 181 | 得看 dwkf ui 950 182 | 东川路 dwl vuo 950 183 | 得让 dwrp uo 1050 184 | 端午安康 dwxk ou 1050 185 | 第二杯 dxb uvv 750 186 | 第二十 dxe uvu 750 187 | 第二十次 dxec uv 950 188 | 懂点 dydm oi 1050 189 | 东育路 dyl voo 950 190 | 冻奶 dynh oa 1050 191 | 第一台 dyt uva 850 192 | 第一桶金 dytj uv 950 193 | 大字典 dzd voi 950 194 | 到店 dzdm vo 950 195 | 对子和 dzh aau 950 196 | 大足区 dzq vov 950 197 | 道咸 dzxm ov 950 198 | 十八个人 ebgr uu 950 199 | 十八号线 ebhx uu 1050 200 | 说不开 ebk ovv 850 201 | 上不了 ebl iva 850 202 | 识别器 ebq ooo 850 203 | 十八梯 ebt uuv 950 204 | 水床 ebwm ao 1050 205 | 水床 ebwx ao 1050 206 | 说得开 edk ouv 1050 207 | 少食多餐 eedc ii 950 208 | 圣书体 eet aai 950 209 | 双凤支路 effl au 1050 210 | 双凤路 efl auo 950 211 | 上周六 efl iuo 850 212 | 上周末 efm iuv 950 213 | 双凤桥 efq auv 850 214 | 上周日 efr iuo 1050 215 | 上周三 efs iuv 950 216 | 十周岁 efs uui 950 217 | 上周四 efs iui 850 218 | 山兔 eftj iu 1050 219 | 上周五 efw iuv 950 220 | 上周二 efx iuv 850 221 | 上周一 efy iuv 950 222 | 束缚在 efz vav 850 223 | 十个人 egr uii 950 224 | 社会社会 eheh oi 950 225 | 上海南 ehn iau 1050 226 | 上海南站 ehnq ia 1050 227 | 晒娃 ehws oa 950 228 | 十号线 ehx uoa 950 229 | 时间不多 ejbd oo 1050 230 | 世纪大道 ejdd va 1050 231 | 上价值 ejf iii 950 232 | 竖折 ejfe ii 950 233 | 十几个人 ejgr uu 1050 234 | 十九个人 ejgr uu 950 235 | 世纪公园 ejgy va 1050 236 | 世纪汇 ejh vaa 950 237 | 十九号线 ejhx uu 950 238 | 蜀拼 ejpb ii 1050 239 | 竖折 ejqe ii 950 240 | 鼠须 ejxl uu 850 241 | 双唇音 ejy avo 950 242 | 释法 ekfs ua 950 243 | 十号 ekhz uo 950 244 | 说开了 ekl ova 950 245 | 十人 ekrn ui 950 246 | 石船 ekwt vu 950 247 | 石鞋 ekxd vv 950 248 | 是哦 ekxl oo 950 249 | 市域 ekyl ov 850 250 | 双龙大道 eldd av 1050 251 | 十六个人 elgr uo 1050 252 | 双龙湖 elh ava 950 253 | 十六号线 elhx uo 950 254 | 湿垃圾 elj avv 950 255 | 士力架 elj vaa 950 256 | 上南路 enl iuo 950 257 | 审音 enyb oo 850 258 | 沙坪坝区 epbq av 1050 259 | 商贷 epdh oi 1050 260 | 上数 epej io 850 261 | 税前收入 eqer uo 1050 262 | 善战者无赫赫之功 eqfg oi 1050 263 | 十七个人 eqgr uv 1050 264 | 十七号线 eqhx uv 1050 265 | 善战者无赫赫之功 eqqg oi 1050 266 | 石柱土家族自治县 eqtx vv 1050 267 | 十人份 erf uii 850 268 | 生光 ergm ui 950 269 | 生光 ergx ui 950 270 | 剩了 erle ua 950 271 | 省流 erlq ia 1050 272 | 生娃 erws ua 1050 273 | 盛宇 eryl vo 750 274 | 十三个人 esgr uv 1050 275 | 十四个人 esgr ui 950 276 | 十三号线 eshx uv 1050 277 | 十四号线 eshx ui 950 278 | 沙面 esmm av 1050 279 | 十五个人 ewgr uv 1050 280 | 十五号线 ewhx uv 950 281 | 十二个人 exgr uv 1050 282 | 十二号线 exhx uv 950 283 | 陕西南路 exnl av 1050 284 | 上一步 eyb ivi 950 285 | 十一个人 eygr uv 1050 286 | 十一号线 eyhx uv 1050 287 | 使用了 eyl iua 850 288 | 商业险 eyx oia 850 289 | 少冰 ezbg io 950 290 | 狮子坪 ezp uav 1050 291 | 方不方便 fbfb ov 1050 292 | 放冰箱 fbx oou 950 293 | 周周 fdfd uu 1050 294 | 否了 fdle va 950 295 | 周浦 fdpj ua 1050 296 | 丰都县 fdx vui 950 297 | 中山公园 fegy ii 1050 298 | 反贼 ffzw ua 950 299 | 返回时 fhe uio 950 300 | 返回值 fhf uii 950 301 | 中环路 fhl ivo 950 302 | 芳华路 fhl iio 850 303 | 中华艺术宫 fhyg ii 1050 304 | 肇嘉浜路 fjbl ov 1050 305 | 辅种 fjfy vu 950 306 | 发出来 fjl aav 950 307 | 放进来 fjl ovv 850 308 | 发出去 fjq aav 850 309 | 放进去 fjq ovv 850 310 | 奉节县 fjx vii 950 311 | 只得 fkdw ou 1050 312 | 纸轴 fkfd av 950 313 | 滞古 fkgj au 950 314 | 中括号 fkh iio 950 315 | 直出 fkjj ua 1050 316 | 值机 fkjk iv 950 317 | 折扣卡 fkk iii 1050 318 | 只狼 fklp ou 1050 319 | 织梦 fkmr av 950 320 | 致钛 fkth vi 1050 321 | 浊点 fldm ai 950 322 | 找了找 flf iai 950 323 | 这两个 flg ovi 950 324 | 发来贺电 flhd av 1050 325 | 涪陵区 flq aav 950 326 | 找了找 flq iai 950 327 | 佛振 flqn ii 1050 328 | 冯·诺伊曼 fnym oo 1050 329 | 扶贫办 fpb iua 1050 330 | 坊间 fpjm vo 950 331 | 方音 fpyb oo 950 332 | 重拳出击 fqjj uo 950 333 | 丰都 frdj vu 850 334 | 奉节 frjd vi 1050 335 | 封控 frky vi 950 336 | 风投 frtd ui 1050 337 | 风噪 frzz uo 1050 338 | 发种 fsfy au 1050 339 | 佛图关 ftg iio 950 340 | 颛桥 ftqc iv 1050 341 | 范特西 ftx iuv 950 342 | 中微子 fwz iua 950 343 | 专项附加扣除 fxfj vv 1050 344 | 折耳根 fxg ivv 950 345 | 专项扣除 fxkj vv 950 346 | 奉贤区 fxq viv 950 347 | 发消息 fxx aau 950 348 | 发信息 fxx aiu 850 349 | 中信银行 fxyh ii 1050 350 | 阜阳市 fye uao 950 351 | 中央公园 fygy ii 950 352 | 中交 fyjc io 1050 353 | 中粮 fylx io 850 354 | 翻译器 fyq uoo 950 355 | 费玉清 fyq ava 850 356 | 忠县 fyxm ii 950 357 | 反作弊 fzb uio 950 358 | 乖不乖 gbg uvu 850 359 | 甘草片 gcp viu 1050 360 | 轨道交通 gdjt vo 1050 361 | 高德纳 gdn oua 950 362 | 滚刀肉 gdr aai 950 363 | 狗咬 gdyz uo 950 364 | 滚犊子 gdz aua 950 365 | 哥猜 gech vu 1050 366 | 谷神星 gex uoo 950 367 | 钢之炼金术师 gfle io 950 368 | 盖革计数器 ggjq ov 1050 369 | 改过来 ggl avv 950 370 | 丐版 ghbf vu 950 371 | 盖饭 ghff ou 1050 372 | 港汇恒隆 ghhl aa 1050 373 | 盖了 ghle oa 950 374 | 咕叽 gjjk oo 850 375 | 古音 gjyb uo 950 376 | 高科西路 gkxl ou 1050 377 | 葛立恒 glh ioo 950 378 | 干垃圾 glj vvv 950 379 | 广兰路 gll ooo 950 380 | 格陵兰 gln vao 950 381 | 过站 glqf vo 950 382 | 鬼灭之刃 gmfr uv 1050 383 | 广相 gmxx ov 950 384 | 隔尿垫 gnd aai 950 385 | 港汇 gphb aa 1050 386 | 更漂亮 gpl vao 1050 387 | 钢炼 gplm io 1050 388 | 肛温 gpwn ua 1050 389 | 高青路 gql ovo 950 390 | 官摄 gtee oi 1050 391 | 官邀 gtyz ou 1050 392 | 官组 gtzj oa 1050 393 | 告五人 gwr uvi 950 394 | 恭喜恭喜 gxgx vv 950 395 | 刮削器 gxq uio 950 396 | 广相 gxxx ov 950 397 | 公制 gyfk uu 850 398 | 工尺 gyje va 950 399 | 公历 gylk uv 850 1 #六码次选 400 | 观音桥 gyq aov 950 401 | 工尺 gywe va 950 402 | 工资单 gzd voo 950 403 | 搞个 gzge ii 950 404 | 彗发 hbfs va 950 405 | 彗核 hbhe vv 950 406 | 华滨家园 hbjy ia 950 407 | 回看 hbkf ii 950 408 | 彗尾 hbww va 950 409 | 回兴 hbxg io 950 410 | 会错意 hcy iio 1050 411 | 后滩 hdtf ua 1050 412 | 海盗湾 hdw aoa 950 413 | 很舒服 hef uiu 950 414 | 花石沟 heg iva 950 415 | 赫根 hegn vv 1050 416 | 合称 hejr iu 950 417 | 合川 hewt iu 950 418 | 汉明 hfmg ao 1050 419 | 沪惠保 hhb avi 950 420 | 婚后生活 hheh au 1050 421 | 淮海中路 hhfl aa 1050 422 | 好好好 hhh aaa 950 423 | 花卉园 hhy iui 950 424 | 黄花园 hhy vii 950 425 | 很好用 hhy uau 850 426 | 和炯路 hjl uoo 950 427 | 沪蓉 hjry ai 1050 428 | 红巨星 hjx avo 950 429 | 沪渝 hjyl aa 950 430 | 喝咖啡 hkf ooo 950 431 | 黄辣丁 hld vov 850 432 | 好冷清 hlq aoa 950 433 | 赫罗图 hlt vii 950 434 | 航旅纵横 hlzh uo 950 435 | 还没到 hmd vav 950 436 | 沪闵路 hml aoo 950 437 | 花木路 hml ivo 950 438 | 海姆立克 hmlk aa 950 439 | 黄码 hmms vv 850 440 | 海绵体 hmt aai 1050 441 | 海马体 hmt aai 950 442 | 河漫滩 hmt aaa 850 443 | 换尿布 hnb iav 950 444 | 黄泥塝 hnb vav 950 445 | 很屌 hndc ua 1050 446 | 很难吃 hnw uao 950 447 | 黄陂南路 hpnl va 1050 448 | 华滨 hqbb ia 1050 449 | 红旗河沟 hqhg ao 1050 450 | 虹桥火车站 hqhq iv 950 451 | 华泾 hqjg ia 1050 452 | 华沁家园 hqjy ia 1050 453 | 航站楼 hql uov 950 454 | 华沁 hqqb ia 1050 455 | 恒隆 hrly oa 1050 456 | 横评 hrpg vo 950 457 | 红土地 htd avv 950 458 | 环食 htek vi 850 459 | 换胎 htth iu 950 460 | 鲩鱼 htyl uu 950 461 | 嘿哈 hwhs oo 950 462 | 黑键 hwjm ii 950 463 | 合胃口 hwk iio 1050 464 | 黑卡 hwks ii 1050 465 | 黑怕 hwps io 1050 466 | 合川区 hwq iuv 950 467 | 黄码 hxms vv 850 468 | 火星文 hxw ooo 950 469 | 褐矮星 hxx ouo 950 470 | 黑矮星 hxx iuo 850 471 | 黄矮星 hxx vuo 850 472 | 华夏西路 hxxl iv 950 473 | 混悬液 hxy aia 950 474 | 耗儿鱼 hxy vuu 950 475 | 话匣子 hxz ova 950 476 | 宏村 hycw ov 1050 477 | 汉语大字典 hydd ao 950 478 | 汉语大词典 hydd ao 850 479 | 红码 hyms av 950 480 | 号口 hzkd oo 1050 481 | 好透 hztd au 1050 482 | 蚝油 hzyd ia 950 483 | 江北机场 jbjj ai 950 484 | 长滨路 jbl uao 950 485 | 嘉滨路 jbl vao 850 486 | 江北区 jbq aiv 950 487 | 简并态 jbt uov 950 488 | 江北县 jbx aii 950 489 | 金谊 jbyk io 950 490 | 仅作 jbzl ii 950 491 | 绞丝 jcsk aa 950 492 | 胶子 jczk ua 950 493 | 借点 jddm ii 750 1 #六码次选 494 | 角动量 jdl uvo 850 495 | 杰伦 jdlw vi 950 496 | 介母 jdmj ia 850 497 | 嘉定区 jdq vov 950 498 | 金沙江路 jejl ia 1050 499 | 常熟路 jel ioo 950 500 | 成山路 jel vio 950 501 | 城市群 jeq voa 950 502 | 加上去 jeq aiv 850 503 | 金山区 jeq iiv 850 504 | 长寿区 jeq uvv 850 505 | 解放初期 jfjq uo 1050 506 | 街坊邻居 jflj uv 950 507 | 九周年 jfn uuu 950 508 | 九周岁 jfs uui 1050 509 | 九个人 jgr uii 950 510 | 截个图 jgt uii 950 511 | 颈子 jgzk aa 950 512 | 九号口 jhk uoo 950 513 | 金海心 jhx iao 950 514 | 几号线 jhx uoa 950 515 | 九号线 jhx uoa 850 516 | 简化字 jhz uio 950 517 | 既成事实 jjee av 950 518 | 长津湖 jjh uaa 950 519 | 江津区 jjq aav 650 1 #六码次选 520 | 机读 jkdj vo 850 521 | 鸡肝 jkgf au 1050 522 | 记好 jkhz oa 950 523 | 记成 jkjr ov 850 524 | 金科路 jkl iuo 950 525 | 记了 jkle oa 950 526 | 撑开伞 jks ivi 1050 527 | 城口县 jkx voi 850 528 | 绩溪 jkxk aa 850 529 | 尝了尝 jlj iai 850 530 | 九龙坡区 jlpq uv 1050 531 | 金鳞岂是池中物 jlqw iu 1050 532 | 家里人 jlr oii 850 533 | 简并 jmbg uo 950 534 | 茧房 jmfp io 950 535 | 嘉闵线 jmx voa 950 536 | 茧子 jmzk ia 950 537 | 毽子 jmzk ua 950 538 | 长宁区 jnq uov 950 539 | 鸡你太美 jntm ai 1050 540 | 扯扑鼾 jph iiu 950 541 | 检票口 jpk vvo 950 542 | 长桥 jpqc uv 1050 543 | 长绒 jpry ua 950 544 | 吉普赛 jps voo 1050 545 | 九笔 jqbk uu 950 546 | 九周 jqfd uu 950 547 | 舅公 jqgy uu 950 548 | 九号 jqhz uo 950 549 | 鬏鬏 jqjq vv 950 550 | 长清路 jql uao 950 551 | 旧历 jqlk iv 1050 552 | 舅婆 jqpl ua 1050 553 | 居住证 jqq aio 850 554 | 九人 jqrn ui 950 555 | 九筒 jqty uu 950 556 | 居然不 jrb auv 950 557 | 趁人不备 jrbb vi 950 558 | 产褥垫 jrd ooi 950 559 | 九人份 jrf uii 950 560 | 城口 jrkd vo 1050 561 | 城开 jrkh vv 950 562 | 产褥期 jrq oov 950 563 | 成渝 jryl va 850 564 | 蛏子 jrzk ia 950 565 | 减速带 jsd ovv 950 566 | 家宽 jskt oo 1050 567 | 江苏路 jsl aio 950 568 | 场所码 jsm vuv 950 569 | 绞丝旁 jsp aao 950 570 | 加我 jswl au 1050 571 | 金色雅筑 jsyq iu 1050 572 | 静态库 jtk vvo 950 573 | 朝天门 jtm uvo 950 574 | 江跳线 jtx aoa 950 575 | 降维打击 jwdj aa 950 576 | 𬂁肝 jwgf uu 1050 577 | 𬂁花 jwhq ui 950 578 | 剑川路 jwl iuo 950 579 | 唇齿音 jwy vio 850 580 | 唇音 jwyb vo 850 581 | 𬂁子 jwzk ua 950 582 | 江津 jxjb aa 950 583 | 锦绣路 jxl iao 950 584 | 降了 jxle aa 950 585 | 静安区 jxq vov 950 586 | 静安寺 jxs vov 950 587 | 绩溪县 jxx aai 950 588 | 间歇性 jxx ooo 950 589 | 超新星 jxx voo 950 590 | 巨行星 jxx vuo 850 591 | 橙矮星 jxx vuo 750 592 | 金谊广场 jygj io 1050 593 | 加油加油 jyjy aa 950 594 | 济阳路 jyl aao 950 595 | 晶耀前滩 jyqt oi 1050 596 | 齽牙齿 jyw ivi 850 597 | 超了 jzle va 950 598 | 夹子音 jzy vao 950 599 | 可不可行 kbkx vv 1050 600 | 坎德拉 kdl vui 950 601 | 可多 kedl vu 1050 602 | 科兴 kexg uo 850 603 | 看呗 kfbw io 1050 604 | 开封菜 kfc vvi 950 605 | 开州区 kfq vov 850 606 | 快排 kgph oi 950 607 | 楷登 khdr va 950 608 | 跨火盆 khp oou 950 609 | 可还行 khx vvu 950 610 | 开呀 khys vo 950 611 | 开邀 khyz vu 950 612 | 快看看 kkk oii 1050 613 | 开空调 kkt voo 950 614 | 可可爱爱 kkxx vv 950 615 | 可连接 klj vvi 950 616 | 康桥 kpqc ov 1050 617 | 康乾 kpqm ou 1050 618 | 坑我 krwl vu 1050 619 | 卡套 kstz iv 1050 620 | 吭哧吭哧 kwkw oo 1050 621 | 昆凌 kwlg oo 1050 622 | 可选项 kxx vuv 950 623 | 空韵 kyyw oo 950 624 | 临港 lbgp ia 1050 625 | 冷不冷 lbl ovo 850 626 | 聊啥 lces vo 1050 627 | 蓝村路 lcl ivo 950 628 | 聊了 lcle va 950 629 | 隆德路 ldl auo 950 630 | 漏尿 ldnc aa 1050 631 | 猎巫 ldwj uv 950 632 | 鹿山村 lec oiv 950 633 | 乐坊 lefp uv 1050 634 | 李胜素 les vuv 950 635 | 兰海 lfhh oa 950 636 | 烂柯 lfke ov 950 637 | 两周年 lfn vuu 1050 638 | 六周年 lfn ouu 950 639 | 澜臻 lfqn av 1050 640 | 两周岁 lfs vui 1050 641 | 六周岁 lfs oui 950 642 | 凌兆新村 lfxc ou 1050 643 | 刘畊宏 lgh oio 950 644 | 领券 lgqt io 1050 645 | 六个人 lgr oii 950 646 | 拉杆箱 lgx ivu 950 647 | 六号口 lhk ooo 950 648 | 芦恒路 lhl ioo 950 649 | 六号线 lhx ooa 950 650 | 陆家浜路 ljbl ao 950 651 | 两江大道 ljdd va 1050 652 | 两件事 lje viv 850 653 | 鹿山 ljef oi 950 654 | 老肩巨滑 ljjh uo 1050 655 | 垃圾筐 ljk vvu 950 656 | 理解你 ljn vui 950 657 | 理解我 ljw vuu 950 658 | 雷佳音 ljy vio 950 659 | 詈辞 lkck iu 950 660 | 隶定 lkdg ao 950 661 | 厘定 lkdg vo 950 662 | 例程 lkjr iu 850 663 | 厘清 lkqg va 950 664 | 黎川 lkwt uu 1050 665 | 詈语 lkyl io 850 666 | 两路口 llk voo 950 667 | 六六六 lll ooo 850 668 | 绿码 llms av 850 669 | 落盘 llpf iu 950 670 | 洛碛 llqk av 950 671 | 联络线 llx vaa 850 672 | 拉马努金 lmnj ia 1050 673 | 镰鼬 lmyd iu 950 674 | 卢浦大桥 lpdq ia 1050 675 | 梁平区 lpq avv 950 676 | 龙七对 lqd vva 850 677 | 两栖动物 lqdw vv 1050 678 | 六周 lqfd ou 950 679 | 拦起来 lql ivv 950 680 | 老丈人 lqr uvi 950 681 | 六人 lqrn oi 950 682 | 六筒 lqty ou 950 683 | 凌兆新村 lqxc ou 1050 684 | 六安 lqxf oo 1050 685 | 懒人包 lrb oiu 950 686 | 两人份 lrf vii 1050 687 | 六人份 lrf oii 950 688 | 六人行 lrx oiu 1050 689 | 辣的 lsde ou 950 690 | 拉胯 lskq iu 1050 691 | 硫酸铝 lsl vvi 950 692 | 硫酸铜 lst vvi 950 693 | 拉新 lsxb io 1050 694 | 拉在 lszh iv 1050 695 | 龙头寺 lts vov 950 696 | 龙抬头 ltt vio 950 697 | 轮状 lwfm vo 1050 698 | 轮状 lwfx vo 1050 699 | 雷鬼 lwgb vu 1050 700 | 乱舞春秋 lwjq uu 1050 701 | 龙吴路 lwl voo 950 702 | 黎川县 lwx uui 950 703 | 两室 lxek vo 950 704 | 罗秀路 lxl iuo 950 705 | 老西门 lxm uvo 950 706 | 梁平 lxpg av 950 707 | 蓝矮星 lxx iuo 950 708 | 蓝又时 lye iao 950 709 | 龙书 lyej va 1050 710 | 陆悦汇 lyh aoa 950 711 | 龙阳路 lyl vao 850 712 | 龙耀路 lyl vio 850 713 | 灵岩南路 lynl ai 1050 714 | 临沂新村 lyxc ia 1050 715 | 龙兴 lyxg vo 1050 716 | 李子坝 lzb vav 1050 717 | 楼组长 lzq vau 950 718 | 某字 mdzk vo 950 719 | 马上到 med aiv 950 720 | 马上来 mel aiv 850 721 | 民法典 mfd aai 850 722 | 穆桂英 mgy uvi 950 723 | 买呗 mhbw ao 1050 724 | 米哈游 mhy ooa 950 725 | 门禁卡 mjk ovi 950 726 | 没教养 mjy auo 1050 727 | 米巿 mkfj ov 950 728 | 磨脚 mljc ou 950 729 | 麦麦脆汁鸡 mmcj vv 1050 730 | 木牛流马 mnlm vu 950 731 | 牟平区 mpq avv 950 732 | 玛奇朵 mqd vvu 950 733 | 码点 msdm vi 1050 734 | 麻椒 msjc ov 950 735 | 码位 msww vi 950 736 | 蒙脱石 mte iuv 850 737 | 蒙脱石散 mtes iu 1050 738 | 没味道 mwd aoo 950 739 | 美光 mwgm oi 950 740 | 美光 mwgx oi 950 741 | 没接 mwjd ai 950 742 | 没网络 mwl aia 1050 743 | 美麓 mwlj ov 950 744 | 没买 mwmh aa 1050 745 | 脉冲星 mwx uoo 950 746 | 没写 mwxd ao 1050 747 | 梅县 mwxm vi 950 748 | 木耳菜 mxc vvi 1050 749 | 曼秀雷敦 mxld ou 1050 750 | 木樨肉 mxr vvi 950 751 | 木须肉 mxr vui 850 752 | 母婴室 mye aio 950 753 | 买一个 myg avi 850 754 | 没影响 myx aoo 950 755 | 泖港 mzgp aa 1050 756 | 猫站 mzqf uo 1050 757 | 南北大道 nbdd ui 1050 758 | 南北高架 nbgj ui 1050 759 | 南滨路 nbl uao 1050 760 | 茑屋 ncwj ia 1050 761 | 你是不是 nebe io 1050 762 | 你是说 nee ioo 950 763 | 纳税额 nex auo 950 764 | 难绷 nfbr aa 1050 765 | 难了 nfle aa 1050 766 | 内啡肽 nft iou 950 767 | 拿回家 nhj iio 950 768 | 拿回去 nhq iiv 950 769 | 南京东路 njdl uo 1050 770 | 拿进来 njl ivv 850 771 | 拿进去 njq ivv 850 772 | 牛角沱 njt uua 950 773 | 南京西路 njxl uo 1050 774 | 你才 nkch iv 950 775 | 女帝 nldk ao 1050 776 | 哪凉快哪呆着去 nlkq oo 1050 777 | 南浦大桥 npdq ua 1050 778 | 纽强 nqqx aa 1050 779 | 拿药 nsyz ii 950 780 | 茑屋书店 nwed ia 1050 781 | 南川区 nwq uuv 950 782 | 内语 nwyl io 1050 783 | 南岸区 nxq uiv 1050 784 | 拿一下 nyx ivv 950 785 | 娘子关 nzg aao 1050 786 | 拼好 pbhz ia 1050 787 | 撇折 pdfe ii 950 788 | 浦东机场 pdjj av 1050 789 | 浦电路 pdl aio 850 790 | 撇折 pdqe ii 950 791 | 平地一声雷 pdyl vv 1050 792 | 盘山路 pel uio 950 793 | 彭水苗族土家族自治县 pemx va 1050 794 | 盘后 pfhd uu 1050 795 | 偏执狂 pfk iiu 950 796 | 盘位 pfww ui 1050 797 | 平路 pglj vo 1050 798 | 瓶喂 pgww oo 850 799 | 牌背 phbw ui 1050 800 | 拍到 phdz iv 950 801 | 拍嗝 phge io 950 802 | 排长队 pjd iua 950 803 | 扑鼾 pjhf iu 1050 804 | 浦江镇 pjq aai 950 805 | 普涨 pjqp oa 950 806 | 抛开事实不谈 pket iv 1050 807 | 拍立得 pld iou 1050 808 | 泼硫酸 pls avv 1050 809 | 旁路由 ply ooi 950 810 | 评评理 ppl oov 950 811 | 彭浦新村 ppxc va 1050 812 | 平翘舌 pqe vvu 950 813 | 彭水 preb va 1050 814 | 椪柑 prgf vv 1050 815 | 彭浦 prpj va 1050 816 | 碰拳 prqt vo 950 817 | 𤆵耳朵 pxd ovu 950 818 | 偏移量 pyl iuo 950 819 | 气不过 qbg uvv 950 820 | 郑伯克段于鄢 qbky oi 950 821 | 亲喂 qbww oo 950 822 | 起手式 qee viv 850 823 | 张韶涵 qeh aoa 950 824 | 郑中基 qfj oiv 950 825 | 曲阜路 qfl iuo 950 826 | 七周年 qfn vuu 950 827 | 七周岁 qfs vui 950 828 | 站厅 qftg ov 950 829 | 战鹰 qfyg io 950 830 | 七个人 qgr vii 850 831 | 请为 qgww oo 850 832 | 七号口 qhk voo 950 833 | 七号线 qhx voa 950 834 | 肇嘉浜路 qjbl ov 950 835 | 住得 qjde iu 950 836 | 张江高科 qjgk aa 1050 837 | 黔江区 qjq iav 950 838 | 綦江区 qjq vav 950 839 | 主序 qjxl oo 1050 840 | 郑家院子 qjyz oo 950 841 | 七笔 qkbk vu 950 842 | 汽博 qkbl au 950 843 | 七对 qkdb va 1050 844 | 奇点 qkdm vi 850 845 | 七周 qkfd vu 950 846 | 折扣卡 qkk iii 950 847 | 欠考虑 qkl uui 950 848 | 七人 qkrn vi 850 849 | 七筒 qkty vu 950 850 | 去冰 qlbg vo 1050 851 | 去呗 qlbw vo 1050 852 | 找了找 qlf iai 950 853 | 这两个 qlg ovi 950 854 | 黢黑 qlhw ii 950 855 | 找了找 qlq iai 950 856 | 七里香 qlx viu 950 857 | 取现 qlxm vv 1050 858 | 欠嗝 qmge uo 950 859 | 前滩 qmtf oa 950 860 | 气门芯 qmx uoi 950 861 | 疹子 qnzk oa 950 862 | 张关 qpgt ao 950 863 | 青浦区 qpq vav 950 864 | 清七对 qqd ava 950 865 | 求种 qqfy vu 950 866 | 求邀 qqyz vu 1050 867 | 七人份 qrf vii 950 868 | 正字 qrzk vo 950 869 | 圈存 qtcw iv 950 870 | 全食 qtek ii 850 871 | 全季 qtjk iu 850 872 | 全羊 qtyp io 1050 873 | 占位符 qwf iiu 950 874 | 折耳根 qxg ivv 950 875 | 强了 qxle aa 950 876 | 抢券 qxqt io 950 877 | 主序星 qxx ooo 950 878 | 缺一个 qyg uvi 950 879 | 张芸京 qyj aio 850 880 | 企耀路 qyl iio 850 881 | 热不热 rbr ivi 950 882 | 热寂 rejk io 950 883 | 热缩 resl ia 1050 884 | 人干事 rge ivv 950 885 | 冉家坝 rjb iov 950 886 | 乳钙 rjgh ui 1050 887 | 荣昌区 rjq iov 950 888 | 弱了 rlle aa 950 889 | 软路由 rly voi 950 890 | 热敏纸 rmf iua 950 891 | 人和 rnhe iu 950 892 | 仁济 rnjk ia 850 893 | 燃气灶 rqz ouo 950 894 | 热缩管 rsg iau 950 895 | 让我看看 rwkk ou 1050 896 | 阮一峰 ryf avi 1050 897 | 荣昌 ryjp io 950 898 | 随申办 seb aia 950 899 | 随申码 sem aiv 950 900 | 三笔 sfbk vu 950 901 | 三室 sfek vo 950 902 | 散列 sfl vv 950 2 #简码 903 | 三林 sflb vv 1050 904 | 散列 sfld vv 850 905 | 三周年 sfn vuu 1050 906 | 四周年 sfn iuu 950 907 | 三周岁 sfs vui 1050 908 | 四周岁 sfs iui 950 909 | 三筒 sfty vu 850 910 | 三选 sfxt vu 950 911 | 四个人 sgr iii 950 912 | 三号口 shk voo 1050 913 | 四号口 shk ioo 950 914 | 四号线 shx ioa 950 915 | 三号线 shx voa 950 916 | 四件事 sje iiv 950 917 | 三件事 sje viv 950 918 | 松江区 sjq vav 950 919 | 三基色 sjs vvu 950 920 | 四君子 sjz iaa 950 921 | 司康饼 skb aou 950 922 | 三口之家 skfj vo 950 923 | 色空间 skj uoo 950 924 | 司康 skkp ao 950 925 | 私章 skqp uo 950 926 | 四人 skrn ii 950 927 | 四筒 skty iu 850 928 | 三林东 sld vvv 950 929 | 三鲁公路 slgl vu 1050 930 | 三鲁路 sll vuo 950 931 | 三林南 sln vvu 1050 932 | 三林镇 slq vvi 950 933 | 缩印 slyb au 950 934 | 撕破脸 spl ivu 1050 935 | 三清山 sqe vai 950 936 | 三人份 srf vii 1050 937 | 四人份 srf iii 950 938 | 诉讼费 ssf ooa 1050 939 | 撒了 ssle ia 1050 940 | 随他去 stq aiv 950 941 | 算筹 stwd uu 950 942 | 𪨊了 syle aa 950 943 | 三亚湾 syw vva 950 944 | 推了 tble ia 950 945 | 推流 tblq ia 1050 946 | 跳蹬 tcdr oo 950 947 | 挑鞋 tcxd iv 950 948 | 特大暴雨 tdby uv 1050 949 | 天地苑 tdy vvi 950 950 | 炭治郎 tfl iao 850 951 | 听感 tggf ov 1050 952 | 停好 tghz ia 950 953 | 太古里 tgl vui 950 954 | 停满 tgmf ia 950 955 | 涂改液 tgy aaa 950 956 | 太和县 thx vui 950 957 | 胎压 thys uv 1050 958 | 图八 tjbs iu 1050 959 | 图九 tjjq iu 950 960 | 图六 tjlq io 1050 961 | 吐奶 tjnh oa 1050 962 | 图七 tjqk iv 750 963 | 吐司 tjsk oa 1050 964 | 图四 tjsk ii 950 965 | 图五 tjwj iv 950 966 | 图二 tjxj iv 1050 967 | 童家院子 tjyz oo 950 968 | 唐家院子 tjyz oo 850 969 | 通假字 tjz aio 950 970 | 提车 tkje iv 1050 971 | 泰裤辣 tkl voo 1050 972 | 提了 tkle ia 950 973 | 提车 tkwe iv 1050 974 | 铜梁区 tlq iav 950 975 | 提篮桥 tlq iuv 850 976 | 天狼星 tlx vuo 950 977 | 甜的 tmde uu 950 978 | 停满了 tml iaa 950 979 | 潼南区 tnq auv 950 980 | 唐镇 tpqn oi 1050 981 | 条条大路通罗马 ttdm uu 1050 982 | 滕王阁 twg uvo 950 983 | 滕王阁序 twgx uv 1050 984 | 体温计 twj iao 950 985 | 图形化 txh ivi 850 986 | 图形界面 txjm iv 1050 987 | 铁暗恋 txl ioo 750 988 | 挑衣服 tyf iou 850 989 | 通规 tygb av 950 990 | 同一件 tyj ivi 850 991 | 统景 tyjg ao 950 992 | 铜梁 tylx ia 950 993 | 统一码 tym avv 950 994 | 潼南 tynf au 950 995 | 同一批 typ ivi 950 996 | 传播者 wbf iiu 950 997 | 传播者 wbq iiu 850 998 | 吃不完 wbw ovo 950 999 | 无从得知 wcdf vi 1050 1000 | 传道者 wdf iou 950 1001 | 传道者 wdq iou 950 1002 | 重定向 wdx uou 850 1003 | 差点意思 wdys oi 950 1004 | 传声筒 wet ivu 950 1005 | 巫山县 wex vii 950 1006 | 万盛 wfer vv 950 1007 | 无职转生 wffe vv 950 1008 | 万进 wfjb vv 850 1009 | 五周年 wfn vuu 1050 1010 | 万州区 wfq vov 950 1011 | 万荣 wfry vi 950 1012 | 五周岁 wfs vui 1050 1013 | 万亿 wfyk vi 950 1014 | 五个人 wgr vii 850 1015 | 歪坏 whfh vv 1050 1016 | 五号口 whk voo 950 1017 | 五号线 whx voa 950 1018 | 完成度 wjd ovo 850 1019 | 五周 wjfd vu 950 1020 | 五号 wjhz vo 1050 1021 | 无了 wjle va 950 1022 | 武隆 wjly va 950 1023 | 武家坡 wjp vov 950 1024 | 吴签 wjqm ou 950 1025 | 五人 wjrn vi 850 1026 | 武统 wjty va 850 1027 | 五筒 wjty vu 850 1028 | 巫溪 wjxk va 850 1029 | 务虚 wjxl ui 950 1030 | 五险 wjxm va 850 1031 | 无袖 wjxq vo 850 1032 | 我看见 wkj uii 1050 1033 | 吃席 wkxk oo 1050 1034 | 五里店 wld vio 850 1035 | 威兰达 wld vov 850 1036 | 我是 wlek uo 950 1037 | 武隆区 wlq vav 850 1038 | 崇明区 wmq iov 950 1039 | 问呗 wnbw oo 1050 1040 | 问的 wnde ou 850 1041 | 问到 wndz ov 850 1042 | 万能卡 wnk vai 1050 1043 | 武宁路 wnl voo 850 1044 | 纹章 wnqp ao 950 1045 | 网段 wpdt iu 950 1046 | 扯扑鼾 wph iiu 950 1047 | 王姐 wpjd va 950 1048 | 旺柴 wpjh oi 950 1049 | 网图 wptj ii 950 1050 | 重庆北 wqb uoi 950 1051 | 重庆北站 wqbq uo 1050 1052 | 重庆大学 wqdx uo 1050 1053 | 五人份 wrf vii 950 1054 | 王若琳 wrl viv 1050 1055 | 万荣县 wrx vii 950 1056 | 查血 wsxd vu 950 1057 | 串流 wtlq ia 950 1058 | 朝天门 wtm uvo 950 1059 | 川美 wtmw uo 950 1060 | 传图 wttj ii 1050 1061 | 川渝 wtyl ua 1050 1062 | 谓词 wwck oo 950 1063 | 查无此人 wwcr vv 950 1064 | 微动 wwdy uv 1050 1065 | 喂了 wwle oa 850 1066 | 蔚来 wwlh iv 950 1067 | 万维网 www vai 950 1068 | 传下去 wxq ivv 950 1069 | 微信群 wxq uia 950 1070 | 卫星厅 wxt aov 950 1071 | 巫溪县 wxx vai 850 1072 | 超新星 wxx voo 850 1073 | 无响应 wxy voo 950 1074 | 冲贷 wydh oi 950 1075 | 重大 wyds uv 1050 1076 | 吴亦凡 wyf oou 850 1077 | 超了 wzle va 950 1078 | 川藏线 wzx uia 950 1079 | 屙㞎㞎 xbb aaa 850 1080 | 新加 xbjs oa 1050 1081 | 稀巴烂 xbl uao 850 1082 | 下班了 xbl vva 850 1083 | 新历 xblk ov 850 1084 | 新盘 xbpf ou 1050 1085 | 新标签 xbq ovu 950 1086 | 新镇 xbqn oi 950 1087 | 笑啥 xces uo 1050 1088 | 小方 xcfp io 850 1089 | 小贵 xcgb ii 950 1090 | 小项 xcxx iv 750 1091 | 昂刺鱼 xcy ovu 950 1092 | 吸顶灯 xdd ovo 950 1093 | 啊对对对 xddd oa 950 1094 | 斜的 xdde iu 950 1095 | 新达汇 xdh ova 950 1096 | 现代汉语词典 xdhd vi 950 1097 | 怄火 xdhl oo 950 1098 | 按到了 xdl iva 850 1099 | 小点声 xde iiv 950 1100 | 小声点 xed ivi 850 1101 | 二十个人 xegr vu 1050 1102 | 二十号线 xehx vu 950 1103 | 鹅岭 xelg ui 950 1104 | 呃逆 xenk oo 1050 1105 | 二十三号线 xesx vu 1050 1106 | 秀山土家族苗族自治县 xetx ui 950 1107 | 阋神星 xex ooo 850 1108 | 二十二号线 xexx vu 850 1109 | 二十一号线 xeyx vu 850 1110 | 笑中带泪 xfdl ui 950 1111 | 按到 xfdz iv 950 1112 | 谙到 xfdz ov 950 1113 | 阿伏伽德罗常数 xfje ai 1050 1114 | 安吉 xfjk ov 950 1115 | 下周六 xfl vuo 950 1116 | 下周末 xfm vuv 950 1117 | 消费券 xfq aao 950 1118 | 下周日 xfr vuo 950 1119 | 下周三 xfs vuv 1050 1120 | 下周四 xfs vui 950 1121 | 下周五 xfw vuv 950 1122 | 下周二 xfx vuv 950 1123 | 下周一 xfy vuv 950 1124 | 小工具 xgj ivi 850 1125 | 星猫 xgmz ou 950 1126 | 希格斯 xgs uvv 950 1127 | 小火箭 xhj iou 950 1128 | 二号口 xhk voo 1050 1129 | 修好了 xhl iaa 950 1130 | 嗳气 xhqk ou 850 1131 | 艾热 xhre ii 1050 1132 | 血旺 xhwp uo 950 1133 | 二号线 xhx voa 950 1134 | 矮星 xhxg uo 750 1135 | 儿化音 xhy uio 950 1136 | 新华苑 xhy oii 850 1137 | 小黑子 xhz iia 850 1138 | 血常规 xjg uiv 950 1139 | 行车记录仪 xjjy uv 1050 1140 | 新春快乐 xjkl ov 1050 1141 | 萧敬腾 xjt iiu 950 1142 | 二筒 xjty vu 950 1143 | 耳温 xjwn va 950 1144 | 安吉县 xjx ovi 950 1145 | 喜饼 xkbg vu 1050 1146 | 稀的 xkde uu 950 1147 | 西数 xkej vo 950 1148 | 吸奶 xknh oa 1050 1149 | 戏腔 xkqx au 950 1150 | 稀碎 xksb uv 950 1151 | 新裤子 xkz ooa 1050 1152 | 哦好 xlhz oa 950 1153 | 小龙坎 xlk ivv 950 1154 | 阿里云盘 xlyp ai 1050 1155 | 掀桌 xmfl ii 1050 1156 | 现汉 xmhf va 1050 1157 | 奥密克戎 xmkr uo 950 1158 | 西南大学 xndx vu 1050 1159 | 小南门 xnm iuo 1050 1160 | 吸奶器 xnq oao 850 1161 | 阿尼亚 xny aav 950 1162 | 削苹果 xpg iii 950 1163 | 小青菜 xqc ivi 950 1164 | 秀山 xqef ui 950 1165 | 修了 xqle ia 1050 1166 | 写权限 xqx ova 750 1167 | 修正液 xqy iva 950 1168 | 二人份 xrf vii 950 1169 | 下数 xsej vo 850 1170 | 新思科技 xskj oi 950 1171 | 二四六 xsl vio 950 1172 | 选车 xtje uv 1050 1173 | 斜土路 xtl ivo 950 1174 | 悬了 xtle ia 950 1175 | 选车 xtwe uv 1050 1176 | 选鞋 xtxd uv 950 1177 | 儿童医学中心 xtyx uo 1050 1178 | 行车记录仪 xwjy uv 1050 1179 | 新窗口 xwk ooo 950 1180 | 耳温枪 xwq vav 950 1181 | 信息茧房 xxjf iu 1050 1182 | 小虾米 xxm iio 950 1183 | 阿西莫夫 xxmf av 1050 1184 | 香农 xxny uo 950 1185 | 矮行星 xxx uuo 850 1186 | 寻衅滋事罪 xxzz au 950 1187 | 选衣服 xyf uou 950 1188 | 下一个词 xygc vv 1050 1189 | 下一个人 xygr vv 950 1190 | 下一个字 xygz vv 1050 1191 | 西营南路 xynl vi 1050 1192 | 西藏南路 xznl vi 950 1193 | 傲腾 xztr iu 1050 1194 | 要抱抱 ybb vii 750 1195 | 音变 ybbm oo 1050 1196 | 游标卡尺 ybkw av 1050 1197 | 银昆 ybkw io 950 1198 | 渝北区 ybq aiv 950 1199 | 音位 ybww oi 950 1200 | 音系 ybxk ou 950 1201 | 应不应该 ybyg ov 950 1202 | 压舱石 yce vuv 9503 1203 | 游标 ydbc av 950 1204 | 一对多 ydd vau 750 1205 | 一丢丢 ydd vuu 650 1 #六码次选 1206 | 优等生 yde iuu 950 1207 | 有点帅 yde vii 850 1208 | 有说 ydel vo 850 1209 | 一大会址 ydhf vv 1050 1210 | 懿德城 ydj vuv 950 1211 | 油车 ydje av 950 1212 | 油车 ydwe av 950 1213 | 于都县 ydx vui 850 1214 | 又当又立 ydyl ai 950 1215 | 原声带 yed vvv 850 1216 | 页宽 yekt vo 1050 1217 | 宜山路 yel oio 850 1218 | 应声虫 yew ovi 950 1219 | 腋温 yewn ua 950 1220 | 虞书欣 yex iau 950 1221 | 延保 yfbz ui 1050 1222 | 以父之名 yffm au 1050 1223 | 渝中区 yfq aiv 850 1224 | 一周岁 yfs vui 1050 1225 | 烟味 yfww oo 1050 1226 | 一妇婴 yfy vaa 950 1227 | 一概不知 ygbf vv 1050 1228 | 杨高南路 ygnl vo 1050 1229 | 约上 yhep ai 950 1230 | 右哼哼 yhh voo 950 1231 | 一号口 yhk voo 950 1232 | 耀华路 yhl iio 950 1233 | 懿行路 yhl vuo 950 1234 | 悦来 yhlh ov 1050 1235 | 一号线 yhx voa 950 1236 | 月晕 yhyw uo 1050 1237 | 牙结石 yje vav 850 1238 | 悦江府 yjf oao 950 1239 | 溢缴款 yjk aav 950 1240 | 云锦路 yjl vio 850 1241 | 庾澄庆 yjq oao 950 1242 | 一键三连 yjsl vi 950 1243 | 渝快保 ykb aoi 950 1244 | 易错 ykcl oi 950 1245 | 懿德 ykde vu 950 1246 | 易读 ykdj oo 950 1247 | 于魁智 ykf vuu 850 1248 | 一人 ykrn vi 850 1249 | 一筒 ykty vu 850 1250 | 异写 ykxd ao 950 1251 | 黟县 ykxm ii 950 1252 | 意项 ykxx ov 750 1253 | 肄业 ykye ui 950 1254 | 渝北 ylbw ai 950 1255 | 养乐多 yld ouu 950 1256 | 预读 yldj ao 1050 1257 | 于都 yldj vu 950 1258 | 鱼洞 yldy ua 1050 1259 | 宇浩 ylhz oa 950 1260 | 蝇量级 ylj ioa 850 1261 | 耀龙路 yll ivo 950 1262 | 渝鲁 yllj au 950 1263 | 于谦 ylqm vo 1050 1264 | 摇粒绒 ylr ioa 950 1265 | 渝蓉 ylry ai 950 1266 | 雨靴 ylxh vv 950 1267 | 豫园 ylyt ai 950 1268 | 鱼嘴 ylzb uo 1050 1269 | 应纳税额 ynex oa 1050 1270 | 阳了 yple aa 950 1271 | 杨思 ypsk vi 950 1272 | 一人份 yrf vii 850 1273 | 杨思路 ysl vio 950 1274 | 一三五 ysw vvv 850 1275 | 永泰路 ytl ovo 950 1276 | 原盘 ytpf vu 950 1277 | 永川区 ywq ouv 950 1278 | 异写字 yxz aoo 850 1279 | 言而总之 yxzf ov 1050 1280 | 岳云鹏 yyp uvu 950 1281 | 酉阳土家族苗族自治县 yytx va 1050 1282 | 永川 yywt ou 1050 1283 | 云阳县 yyx vai 850 1284 | 有印象 yyx vuu 850 1285 | 犹犹豫豫 yyyy uu 950 1286 | 幺爸 yzbs au 950 1287 | 要抱 yzbz vi 950 1288 | 耀华 yzhq ii 950 1289 | 幺鸡 yzjk aa 950 1290 | 总不可能 zbkn ov 1050 1291 | 走珠 zdqj vv 950 1292 | 祖师爷 zey oiu 950 1293 | 攒劲 zfjb ia 950 1294 | 坐过站 zgq ivo 950 1295 | 做贡献 zgx ivu 950 1296 | 再改 zhgh va 950 1297 | 左哼哼 zhh voo 950 1298 | 做核酸 zhs ivv 950 1299 | 自己看 zjk uai 1050 1300 | 组内 zjnw ai 1050 1301 | 做家务 zjw iou 950 1302 | 曾家岩 zjy ooi 950 1303 | 组字 zjzk ao 1050 1304 | 最可怕 zkp ovo 1050 1305 | 紫棋 zkqk iv 950 1306 | 自签 zkqm uu 950 1307 | 呲牙 zkys ov 950 1308 | 坐呗 zlbw io 1050 1309 | 字母表 zmb oav 850 1310 | 怎么办呀 zmby uu 1050 1311 | 字面量 zml ovo 950 1312 | 自签名 zqm uuu 950 1313 | 甑子 zrzk oa 950 1314 | 自诉人 zsr uoi 950 1315 | 座位险 zwx oia 950 1316 | 最早在 zzz oov 950 1317 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or key for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . -------------------------------------------------------------------------------- /scripts/shortcut/键道安装.json: -------------------------------------------------------------------------------- 1 | { 2 | "WFWorkflowMinimumClientVersionString": "1106", 3 | "WFWorkflowMinimumClientVersion": 1106, 4 | "WFWorkflowIcon": { 5 | "WFWorkflowIconStartColor": -20702977, 6 | "WFWorkflowIconGlyphNumber": 59841 7 | }, 8 | "WFWorkflowClientVersion": "3036.0.7", 9 | "WFWorkflowOutputContentItemClasses": [], 10 | "WFWorkflowHasOutputFallback": false, 11 | "WFWorkflowActions": [ 12 | { 13 | "WFWorkflowActionIdentifier": "is.workflow.actions.comment", 14 | "WFWorkflowActionParameters": { 15 | "WFCommentActionText": "RIME Jiandao Installer for Hamster\nCopyright (C) 2023, 2024 Xuesong Peng \n\nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License along with this program. If not, see ." 16 | } 17 | }, 18 | { 19 | "WFWorkflowActionIdentifier": "is.workflow.actions.gettext", 20 | "WFWorkflowActionParameters": { 21 | "WFTextActionText": "⚠️注意⚠️\n\n运行前:\n\n❗️需要安装仓输入法,且新版本的仓输入法才能自动重新部署\n❗️请根据提示选择仓输入法的顶层目录\n\n运行过程中:\n\n❗️需要授权此快捷指令访问相应网址才能下载键道方案\n❗️需要授权此快捷指令访问仓输入法目录才能储存方案文件\n❗️需要授权此快捷指令运行仓输入法提供的指令才能自动重新部署", 22 | "UUID": "4B8D6295-EEFD-436B-883B-7B87C6D5C2D8" 23 | } 24 | }, 25 | { 26 | "WFWorkflowActionIdentifier": "is.workflow.actions.file", 27 | "WFWorkflowActionParameters": { 28 | "UUID": "4A58D12F-0326-413F-B5E7-B1B16D4A0EFD" 29 | } 30 | }, 31 | { 32 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 33 | "WFWorkflowActionParameters": { 34 | "WFInput": { 35 | "Type": "Variable", 36 | "Variable": { 37 | "Value": { 38 | "Type": "ActionOutput", 39 | "OutputName": "文件", 40 | "OutputUUID": "4A58D12F-0326-413F-B5E7-B1B16D4A0EFD", 41 | "Aggrandizements": [ 42 | { 43 | "PropertyUserInfo": {}, 44 | "Type": "WFPropertyVariableAggrandizement", 45 | "PropertyName": "File Path" 46 | } 47 | ] 48 | }, 49 | "WFSerializationType": "WFTextTokenAttachment" 50 | } 51 | }, 52 | "WFControlFlowMode": 0, 53 | "GroupingIdentifier": "D61B11E8-A89F-4D2C-8DB6-993CE8D2862A", 54 | "WFCondition": 101 55 | } 56 | }, 57 | { 58 | "WFWorkflowActionIdentifier": "is.workflow.actions.alert", 59 | "WFWorkflowActionParameters": { 60 | "WFAlertActionMessage": "请选择仓输入法顶层目录", 61 | "WFAlertActionTitle": "未设置仓输入法目录" 62 | } 63 | }, 64 | { 65 | "WFWorkflowActionIdentifier": "is.workflow.actions.file.select", 66 | "WFWorkflowActionParameters": { 67 | "WFPickingMode": "Folders", 68 | "UUID": "AC45BDDA-A605-4AD1-A377-3B96B86D9735" 69 | } 70 | }, 71 | { 72 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 73 | "WFWorkflowActionParameters": { 74 | "WFControlFlowMode": 2, 75 | "GroupingIdentifier": "D61B11E8-A89F-4D2C-8DB6-993CE8D2862A", 76 | "UUID": "D2D58F53-5615-4655-A1E1-5C55355E64C5" 77 | } 78 | }, 79 | { 80 | "WFWorkflowActionIdentifier": "is.workflow.actions.setvariable", 81 | "WFWorkflowActionParameters": { 82 | "WFInput": { 83 | "Value": { 84 | "OutputUUID": "D2D58F53-5615-4655-A1E1-5C55355E64C5", 85 | "Type": "ActionOutput", 86 | "OutputName": "如果的结果" 87 | }, 88 | "WFSerializationType": "WFTextTokenAttachment" 89 | }, 90 | "WFVariableName": "仓输入法目录" 91 | } 92 | }, 93 | { 94 | "WFWorkflowActionIdentifier": "is.workflow.actions.list", 95 | "WFWorkflowActionParameters": { 96 | "WFItems": [ 97 | "GitHub", 98 | "Gitee" 99 | ], 100 | "CustomOutputName": "源选项", 101 | "UUID": "86C24813-6BE6-41F4-BCE5-DEE2B9A74D3E" 102 | } 103 | }, 104 | { 105 | "WFWorkflowActionIdentifier": "is.workflow.actions.choosefromlist", 106 | "WFWorkflowActionParameters": { 107 | "WFInput": { 108 | "Value": { 109 | "OutputUUID": "86C24813-6BE6-41F4-BCE5-DEE2B9A74D3E", 110 | "Type": "ActionOutput", 111 | "OutputName": "源选项" 112 | }, 113 | "WFSerializationType": "WFTextTokenAttachment" 114 | }, 115 | "WFChooseFromListActionPrompt": "请选择下载源", 116 | "CustomOutputName": "源", 117 | "UUID": "563FBC14-3A9B-44A9-87E1-AFABABDAA2E2" 118 | } 119 | }, 120 | { 121 | "WFWorkflowActionIdentifier": "is.workflow.actions.list", 122 | "WFWorkflowActionParameters": { 123 | "WFItems": [ 124 | "1. 覆盖用户配置(default.custom.yaml)", 125 | "2. 覆盖用户词典(jiandao.user.dict.yaml)", 126 | "3. 同时覆盖两者", 127 | "4. 两者均不覆盖" 128 | ], 129 | "CustomOutputName": "覆盖选项", 130 | "UUID": "975304BE-F793-47D3-971C-0EEBE0F0EA12" 131 | } 132 | }, 133 | { 134 | "WFWorkflowActionIdentifier": "is.workflow.actions.choosefromlist", 135 | "WFWorkflowActionParameters": { 136 | "WFInput": { 137 | "Value": { 138 | "OutputUUID": "975304BE-F793-47D3-971C-0EEBE0F0EA12", 139 | "Type": "ActionOutput", 140 | "OutputName": "覆盖选项" 141 | }, 142 | "WFSerializationType": "WFTextTokenAttachment" 143 | }, 144 | "WFChooseFromListActionPrompt": "请选择覆盖方式", 145 | "CustomOutputName": "覆盖选择", 146 | "UUID": "F6B9D116-9604-4732-A09E-A3ABA3BE2296" 147 | } 148 | }, 149 | { 150 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 151 | "WFWorkflowActionParameters": { 152 | "WFInput": { 153 | "Type": "Variable", 154 | "Variable": { 155 | "Value": { 156 | "OutputUUID": "563FBC14-3A9B-44A9-87E1-AFABABDAA2E2", 157 | "Type": "ActionOutput", 158 | "OutputName": "源" 159 | }, 160 | "WFSerializationType": "WFTextTokenAttachment" 161 | } 162 | }, 163 | "WFControlFlowMode": 0, 164 | "WFConditionalActionString": "GitHub", 165 | "GroupingIdentifier": "9FAC566C-EECA-4577-ADBC-9DC0466C840F", 166 | "WFCondition": 4 167 | } 168 | }, 169 | { 170 | "WFWorkflowActionIdentifier": "is.workflow.actions.gettext", 171 | "WFWorkflowActionParameters": { 172 | "WFTextActionText": "https://api.github.com/repos/amorphobia/rime-jiandao/releases/latest", 173 | "UUID": "D7A6F307-32BB-4C32-8F7A-8C20C4662F76" 174 | } 175 | }, 176 | { 177 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 178 | "WFWorkflowActionParameters": { 179 | "GroupingIdentifier": "9FAC566C-EECA-4577-ADBC-9DC0466C840F", 180 | "WFControlFlowMode": 1 181 | } 182 | }, 183 | { 184 | "WFWorkflowActionIdentifier": "is.workflow.actions.gettext", 185 | "WFWorkflowActionParameters": { 186 | "WFTextActionText": "https://gitee.com/api/v5/repos/amorphobia/rime-jiandao/releases/latest", 187 | "UUID": "29DAA606-50B7-48B5-B837-0310A686DFB3" 188 | } 189 | }, 190 | { 191 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 192 | "WFWorkflowActionParameters": { 193 | "WFControlFlowMode": 2, 194 | "GroupingIdentifier": "9FAC566C-EECA-4577-ADBC-9DC0466C840F", 195 | "UUID": "E9F2A3B8-33D2-442F-8723-EF90DD179029" 196 | } 197 | }, 198 | { 199 | "WFWorkflowActionIdentifier": "is.workflow.actions.downloadurl", 200 | "WFWorkflowActionParameters": { 201 | "WFURL": { 202 | "Value": { 203 | "string": "\uFFFC", 204 | "attachmentsByRange": { 205 | "{0, 1}": { 206 | "OutputUUID": "E9F2A3B8-33D2-442F-8723-EF90DD179029", 207 | "Type": "ActionOutput", 208 | "OutputName": "如果的结果" 209 | } 210 | } 211 | }, 212 | "WFSerializationType": "WFTextTokenString" 213 | }, 214 | "UUID": "C0FFFDCF-ECB2-4DAA-8DEE-9982C7224A60" 215 | } 216 | }, 217 | { 218 | "WFWorkflowActionIdentifier": "is.workflow.actions.detect.dictionary", 219 | "WFWorkflowActionParameters": { 220 | "WFInput": { 221 | "Value": { 222 | "OutputUUID": "C0FFFDCF-ECB2-4DAA-8DEE-9982C7224A60", 223 | "Type": "ActionOutput", 224 | "OutputName": "URL的内容" 225 | }, 226 | "WFSerializationType": "WFTextTokenAttachment" 227 | }, 228 | "UUID": "36D78610-F6D6-4443-9BA2-93C4396043C3" 229 | } 230 | }, 231 | { 232 | "WFWorkflowActionIdentifier": "is.workflow.actions.getvalueforkey", 233 | "WFWorkflowActionParameters": { 234 | "WFInput": { 235 | "Value": { 236 | "OutputUUID": "36D78610-F6D6-4443-9BA2-93C4396043C3", 237 | "Type": "ActionOutput", 238 | "OutputName": "词典" 239 | }, 240 | "WFSerializationType": "WFTextTokenAttachment" 241 | }, 242 | "CustomOutputName": "标签", 243 | "UUID": "0760D2E3-3EC8-4917-B99B-92D555A6B8D2", 244 | "WFDictionaryKey": "tag_name" 245 | } 246 | }, 247 | { 248 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 249 | "WFWorkflowActionParameters": { 250 | "WFInput": { 251 | "Type": "Variable", 252 | "Variable": { 253 | "Value": { 254 | "OutputUUID": "563FBC14-3A9B-44A9-87E1-AFABABDAA2E2", 255 | "Type": "ActionOutput", 256 | "OutputName": "源" 257 | }, 258 | "WFSerializationType": "WFTextTokenAttachment" 259 | } 260 | }, 261 | "WFControlFlowMode": 0, 262 | "WFConditionalActionString": "GitHub", 263 | "GroupingIdentifier": "228FFD08-2E44-472B-99D3-7CC459FE0AA9", 264 | "WFCondition": 4 265 | } 266 | }, 267 | { 268 | "WFWorkflowActionIdentifier": "is.workflow.actions.gettext", 269 | "WFWorkflowActionParameters": { 270 | "WFTextActionText": { 271 | "Value": { 272 | "string": "https://github.com/amorphobia/rime-jiandao/releases/download/\uFFFC/jiandao-\uFFFC.zip", 273 | "attachmentsByRange": { 274 | "{61, 1}": { 275 | "OutputUUID": "0760D2E3-3EC8-4917-B99B-92D555A6B8D2", 276 | "Type": "ActionOutput", 277 | "OutputName": "标签" 278 | }, 279 | "{71, 1}": { 280 | "OutputUUID": "0760D2E3-3EC8-4917-B99B-92D555A6B8D2", 281 | "Type": "ActionOutput", 282 | "OutputName": "标签" 283 | } 284 | } 285 | }, 286 | "WFSerializationType": "WFTextTokenString" 287 | }, 288 | "UUID": "B5AD7B52-7026-45E2-A55B-39DEBDF619AC" 289 | } 290 | }, 291 | { 292 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 293 | "WFWorkflowActionParameters": { 294 | "GroupingIdentifier": "228FFD08-2E44-472B-99D3-7CC459FE0AA9", 295 | "WFControlFlowMode": 1 296 | } 297 | }, 298 | { 299 | "WFWorkflowActionIdentifier": "is.workflow.actions.gettext", 300 | "WFWorkflowActionParameters": { 301 | "WFTextActionText": { 302 | "Value": { 303 | "string": "https://gitee.com/amorphobia/rime-jiandao/releases/download/\uFFFC/jiandao-\uFFFC.zip", 304 | "attachmentsByRange": { 305 | "{60, 1}": { 306 | "OutputUUID": "0760D2E3-3EC8-4917-B99B-92D555A6B8D2", 307 | "Type": "ActionOutput", 308 | "OutputName": "标签" 309 | }, 310 | "{70, 1}": { 311 | "OutputUUID": "0760D2E3-3EC8-4917-B99B-92D555A6B8D2", 312 | "Type": "ActionOutput", 313 | "OutputName": "标签" 314 | } 315 | } 316 | }, 317 | "WFSerializationType": "WFTextTokenString" 318 | }, 319 | "UUID": "91490D8D-ECED-40D1-B526-1D0CBF706607" 320 | } 321 | }, 322 | { 323 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 324 | "WFWorkflowActionParameters": { 325 | "WFControlFlowMode": 2, 326 | "GroupingIdentifier": "228FFD08-2E44-472B-99D3-7CC459FE0AA9", 327 | "UUID": "C446E47C-A9C7-424A-AAF7-7C2D1EBC70C2" 328 | } 329 | }, 330 | { 331 | "WFWorkflowActionIdentifier": "is.workflow.actions.downloadurl", 332 | "WFWorkflowActionParameters": { 333 | "WFURL": { 334 | "Value": { 335 | "string": "\uFFFC", 336 | "attachmentsByRange": { 337 | "{0, 1}": { 338 | "OutputUUID": "C446E47C-A9C7-424A-AAF7-7C2D1EBC70C2", 339 | "Type": "ActionOutput", 340 | "OutputName": "如果的结果" 341 | } 342 | } 343 | }, 344 | "WFSerializationType": "WFTextTokenString" 345 | }, 346 | "CustomOutputName": "下载的压缩包", 347 | "UUID": "EB99AA4B-E755-4A55-8470-A2B41333E28F" 348 | } 349 | }, 350 | { 351 | "WFWorkflowActionIdentifier": "is.workflow.actions.number", 352 | "WFWorkflowActionParameters": { 353 | "WFNumberActionNumber": "0", 354 | "CustomOutputName": "假", 355 | "UUID": "0A485BE4-1C11-405B-B0F8-6044425207BA" 356 | } 357 | }, 358 | { 359 | "WFWorkflowActionIdentifier": "is.workflow.actions.number", 360 | "WFWorkflowActionParameters": { 361 | "WFNumberActionNumber": "1", 362 | "CustomOutputName": "真", 363 | "UUID": "F68303F6-8B95-44DD-B707-EA9B956E247E" 364 | } 365 | }, 366 | { 367 | "WFWorkflowActionIdentifier": "is.workflow.actions.setvariable", 368 | "WFWorkflowActionParameters": { 369 | "WFInput": { 370 | "Value": { 371 | "OutputUUID": "0A485BE4-1C11-405B-B0F8-6044425207BA", 372 | "Type": "ActionOutput", 373 | "OutputName": "假" 374 | }, 375 | "WFSerializationType": "WFTextTokenAttachment" 376 | }, 377 | "WFVariableName": "覆盖用户配置" 378 | } 379 | }, 380 | { 381 | "WFWorkflowActionIdentifier": "is.workflow.actions.setvariable", 382 | "WFWorkflowActionParameters": { 383 | "WFInput": { 384 | "Value": { 385 | "OutputUUID": "0A485BE4-1C11-405B-B0F8-6044425207BA", 386 | "Type": "ActionOutput", 387 | "OutputName": "假" 388 | }, 389 | "WFSerializationType": "WFTextTokenAttachment" 390 | }, 391 | "WFVariableName": "覆盖用户词典" 392 | } 393 | }, 394 | { 395 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 396 | "WFWorkflowActionParameters": { 397 | "WFInput": { 398 | "Type": "Variable", 399 | "Variable": { 400 | "Value": { 401 | "OutputUUID": "F6B9D116-9604-4732-A09E-A3ABA3BE2296", 402 | "Type": "ActionOutput", 403 | "OutputName": "覆盖选择" 404 | }, 405 | "WFSerializationType": "WFTextTokenAttachment" 406 | } 407 | }, 408 | "WFControlFlowMode": 0, 409 | "WFConditionalActionString": "1", 410 | "GroupingIdentifier": "695725A1-ECC7-477F-BE99-74A5915C9675", 411 | "WFCondition": 8 412 | } 413 | }, 414 | { 415 | "WFWorkflowActionIdentifier": "is.workflow.actions.setvariable", 416 | "WFWorkflowActionParameters": { 417 | "WFInput": { 418 | "Value": { 419 | "OutputUUID": "F68303F6-8B95-44DD-B707-EA9B956E247E", 420 | "Type": "ActionOutput", 421 | "OutputName": "真" 422 | }, 423 | "WFSerializationType": "WFTextTokenAttachment" 424 | }, 425 | "WFVariableName": "覆盖用户配置" 426 | } 427 | }, 428 | { 429 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 430 | "WFWorkflowActionParameters": { 431 | "WFControlFlowMode": 2, 432 | "GroupingIdentifier": "695725A1-ECC7-477F-BE99-74A5915C9675", 433 | "UUID": "CF00E0A9-24E8-44F8-A8FF-3AA69835E449" 434 | } 435 | }, 436 | { 437 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 438 | "WFWorkflowActionParameters": { 439 | "WFInput": { 440 | "Type": "Variable", 441 | "Variable": { 442 | "Value": { 443 | "OutputUUID": "F6B9D116-9604-4732-A09E-A3ABA3BE2296", 444 | "Type": "ActionOutput", 445 | "OutputName": "覆盖选择" 446 | }, 447 | "WFSerializationType": "WFTextTokenAttachment" 448 | } 449 | }, 450 | "WFControlFlowMode": 0, 451 | "WFConditionalActionString": "2", 452 | "GroupingIdentifier": "9C5018D6-9FBD-4F61-B65C-3CFEE1218F4F", 453 | "WFCondition": 8 454 | } 455 | }, 456 | { 457 | "WFWorkflowActionIdentifier": "is.workflow.actions.setvariable", 458 | "WFWorkflowActionParameters": { 459 | "WFInput": { 460 | "Value": { 461 | "OutputUUID": "F68303F6-8B95-44DD-B707-EA9B956E247E", 462 | "Type": "ActionOutput", 463 | "OutputName": "真" 464 | }, 465 | "WFSerializationType": "WFTextTokenAttachment" 466 | }, 467 | "WFVariableName": "覆盖用户词典" 468 | } 469 | }, 470 | { 471 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 472 | "WFWorkflowActionParameters": { 473 | "WFControlFlowMode": 2, 474 | "GroupingIdentifier": "9C5018D6-9FBD-4F61-B65C-3CFEE1218F4F", 475 | "UUID": "85548B26-74AB-4227-9AEA-29132278EE24" 476 | } 477 | }, 478 | { 479 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 480 | "WFWorkflowActionParameters": { 481 | "WFInput": { 482 | "Type": "Variable", 483 | "Variable": { 484 | "Value": { 485 | "OutputUUID": "F6B9D116-9604-4732-A09E-A3ABA3BE2296", 486 | "Type": "ActionOutput", 487 | "OutputName": "覆盖选择" 488 | }, 489 | "WFSerializationType": "WFTextTokenAttachment" 490 | } 491 | }, 492 | "WFControlFlowMode": 0, 493 | "WFConditionalActionString": "3", 494 | "GroupingIdentifier": "5BFF92CC-7FF6-4B7E-ACCA-C28A01E88D72", 495 | "WFCondition": 8 496 | } 497 | }, 498 | { 499 | "WFWorkflowActionIdentifier": "is.workflow.actions.setvariable", 500 | "WFWorkflowActionParameters": { 501 | "WFInput": { 502 | "Value": { 503 | "OutputUUID": "F68303F6-8B95-44DD-B707-EA9B956E247E", 504 | "Type": "ActionOutput", 505 | "OutputName": "真" 506 | }, 507 | "WFSerializationType": "WFTextTokenAttachment" 508 | }, 509 | "WFVariableName": "覆盖用户配置" 510 | } 511 | }, 512 | { 513 | "WFWorkflowActionIdentifier": "is.workflow.actions.setvariable", 514 | "WFWorkflowActionParameters": { 515 | "WFInput": { 516 | "Value": { 517 | "OutputUUID": "F68303F6-8B95-44DD-B707-EA9B956E247E", 518 | "Type": "ActionOutput", 519 | "OutputName": "真" 520 | }, 521 | "WFSerializationType": "WFTextTokenAttachment" 522 | }, 523 | "WFVariableName": "覆盖用户词典" 524 | } 525 | }, 526 | { 527 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 528 | "WFWorkflowActionParameters": { 529 | "WFControlFlowMode": 2, 530 | "GroupingIdentifier": "5BFF92CC-7FF6-4B7E-ACCA-C28A01E88D72", 531 | "UUID": "34C7FC26-3274-4DD2-A2C7-82D57C21C73D" 532 | } 533 | }, 534 | { 535 | "WFWorkflowActionIdentifier": "is.workflow.actions.documentpicker.open", 536 | "WFWorkflowActionParameters": { 537 | "WFFile": { 538 | "Value": { 539 | "VariableName": "仓输入法目录", 540 | "Type": "Variable" 541 | }, 542 | "WFSerializationType": "WFTextTokenAttachment" 543 | }, 544 | "WFFileErrorIfNotFound": false, 545 | "WFGetFilePath": "Rime/jiandao.user.dict.yaml", 546 | "CustomOutputName": "用户词典文件", 547 | "UUID": "17B2A68C-EB36-4CD3-B648-DEE965DABDDC" 548 | } 549 | }, 550 | { 551 | "WFWorkflowActionIdentifier": "is.workflow.actions.count", 552 | "WFWorkflowActionParameters": { 553 | "Input": { 554 | "Value": { 555 | "OutputUUID": "17B2A68C-EB36-4CD3-B648-DEE965DABDDC", 556 | "Type": "ActionOutput", 557 | "OutputName": "用户词典文件" 558 | }, 559 | "WFSerializationType": "WFTextTokenAttachment" 560 | }, 561 | "CustomOutputName": "用户词典文件数量", 562 | "UUID": "1E3F82B8-323A-43E6-8381-86D83AEBFAE1" 563 | } 564 | }, 565 | { 566 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 567 | "WFWorkflowActionParameters": { 568 | "GroupingIdentifier": "932EC816-5F05-4D30-932E-5109DAF9CB6F", 569 | "WFInput": { 570 | "Type": "Variable", 571 | "Variable": { 572 | "Value": { 573 | "OutputUUID": "1E3F82B8-323A-43E6-8381-86D83AEBFAE1", 574 | "Type": "ActionOutput", 575 | "OutputName": "用户词典文件数量" 576 | }, 577 | "WFSerializationType": "WFTextTokenAttachment" 578 | } 579 | }, 580 | "WFControlFlowMode": 0, 581 | "WFNumberValue": "0", 582 | "WFCondition": 4 583 | } 584 | }, 585 | { 586 | "WFWorkflowActionIdentifier": "is.workflow.actions.setvariable", 587 | "WFWorkflowActionParameters": { 588 | "WFInput": { 589 | "Value": { 590 | "OutputUUID": "F68303F6-8B95-44DD-B707-EA9B956E247E", 591 | "Type": "ActionOutput", 592 | "OutputName": "真" 593 | }, 594 | "WFSerializationType": "WFTextTokenAttachment" 595 | }, 596 | "WFVariableName": "覆盖用户词典" 597 | } 598 | }, 599 | { 600 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 601 | "WFWorkflowActionParameters": { 602 | "WFControlFlowMode": 2, 603 | "GroupingIdentifier": "932EC816-5F05-4D30-932E-5109DAF9CB6F", 604 | "UUID": "51E4FF0C-0A67-422A-8A51-233F20824EA2" 605 | } 606 | }, 607 | { 608 | "WFWorkflowActionIdentifier": "is.workflow.actions.unzip", 609 | "WFWorkflowActionParameters": { 610 | "CustomOutputName": "解压的文件", 611 | "WFArchive": { 612 | "Value": { 613 | "OutputUUID": "EB99AA4B-E755-4A55-8470-A2B41333E28F", 614 | "Type": "ActionOutput", 615 | "OutputName": "下载的压缩包" 616 | }, 617 | "WFSerializationType": "WFTextTokenAttachment" 618 | }, 619 | "UUID": "6D3D2818-5CF6-4161-AFA0-80474D4DC165" 620 | } 621 | }, 622 | { 623 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 624 | "WFWorkflowActionParameters": { 625 | "GroupingIdentifier": "2D540775-A6F0-4F3F-A1E0-29A5790492E2", 626 | "WFInput": { 627 | "Type": "Variable", 628 | "Variable": { 629 | "Value": { 630 | "VariableName": "覆盖用户词典", 631 | "Type": "Variable" 632 | }, 633 | "WFSerializationType": "WFTextTokenAttachment" 634 | } 635 | }, 636 | "WFControlFlowMode": 0, 637 | "WFNumberValue": "0", 638 | "WFCondition": 2 639 | } 640 | }, 641 | { 642 | "WFWorkflowActionIdentifier": "is.workflow.actions.getvariable", 643 | "WFWorkflowActionParameters": { 644 | "WFVariable": { 645 | "Value": { 646 | "OutputUUID": "6D3D2818-5CF6-4161-AFA0-80474D4DC165", 647 | "Type": "ActionOutput", 648 | "OutputName": "解压的文件" 649 | }, 650 | "WFSerializationType": "WFTextTokenAttachment" 651 | } 652 | } 653 | }, 654 | { 655 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 656 | "WFWorkflowActionParameters": { 657 | "GroupingIdentifier": "2D540775-A6F0-4F3F-A1E0-29A5790492E2", 658 | "WFControlFlowMode": 1 659 | } 660 | }, 661 | { 662 | "WFWorkflowActionIdentifier": "is.workflow.actions.filter.files", 663 | "WFWorkflowActionParameters": { 664 | "WFContentItemFilter": { 665 | "Value": { 666 | "WFActionParameterFilterPrefix": 1, 667 | "WFContentPredicateBoundedDate": false, 668 | "WFActionParameterFilterTemplates": [ 669 | { 670 | "Operator": 5, 671 | "Values": { 672 | "Unit": { 673 | "Value": 4, 674 | "WFSerializationType": "WFCalendarUnitSubstitutableState" 675 | }, 676 | "String": "jiandao.user.dict" 677 | }, 678 | "Removable": true, 679 | "Property": "Name" 680 | } 681 | ] 682 | }, 683 | "WFSerializationType": "WFContentPredicateTableTemplate" 684 | }, 685 | "WFContentItemInputParameter": { 686 | "Value": { 687 | "OutputUUID": "6D3D2818-5CF6-4161-AFA0-80474D4DC165", 688 | "Type": "ActionOutput", 689 | "OutputName": "解压的文件" 690 | }, 691 | "WFSerializationType": "WFTextTokenAttachment" 692 | } 693 | } 694 | }, 695 | { 696 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 697 | "WFWorkflowActionParameters": { 698 | "WFControlFlowMode": 2, 699 | "GroupingIdentifier": "2D540775-A6F0-4F3F-A1E0-29A5790492E2", 700 | "UUID": "085918DE-48D8-4A84-B15F-901D6F726472" 701 | } 702 | }, 703 | { 704 | "WFWorkflowActionIdentifier": "is.workflow.actions.documentpicker.save", 705 | "WFWorkflowActionParameters": { 706 | "WFFolder": { 707 | "Value": { 708 | "VariableName": "仓输入法目录", 709 | "Type": "Variable" 710 | }, 711 | "WFSerializationType": "WFTextTokenAttachment" 712 | }, 713 | "WFAskWhereToSave": false, 714 | "WFInput": { 715 | "Value": { 716 | "OutputUUID": "085918DE-48D8-4A84-B15F-901D6F726472", 717 | "Type": "ActionOutput", 718 | "OutputName": "如果的结果" 719 | }, 720 | "WFSerializationType": "WFTextTokenAttachment" 721 | }, 722 | "UUID": "C215A21D-8DF3-4092-82C1-C79BE4A26F03", 723 | "WFSaveFileOverwrite": true, 724 | "WFFileDestinationPath": "/Rime" 725 | } 726 | }, 727 | { 728 | "WFWorkflowActionIdentifier": "is.workflow.actions.documentpicker.open", 729 | "WFWorkflowActionParameters": { 730 | "WFFile": { 731 | "Value": { 732 | "VariableName": "仓输入法目录", 733 | "Type": "Variable" 734 | }, 735 | "WFSerializationType": "WFTextTokenAttachment" 736 | }, 737 | "WFFileErrorIfNotFound": false, 738 | "WFGetFilePath": "Rime/default.custom.yaml", 739 | "CustomOutputName": "用户配置文件", 740 | "UUID": "C0F44581-FB7A-4086-A890-341AFFBF5303" 741 | } 742 | }, 743 | { 744 | "WFWorkflowActionIdentifier": "is.workflow.actions.count", 745 | "WFWorkflowActionParameters": { 746 | "Input": { 747 | "Value": { 748 | "OutputUUID": "C0F44581-FB7A-4086-A890-341AFFBF5303", 749 | "Type": "ActionOutput", 750 | "OutputName": "用户配置文件" 751 | }, 752 | "WFSerializationType": "WFTextTokenAttachment" 753 | }, 754 | "CustomOutputName": "用户配置文件数量", 755 | "UUID": "21BFF667-5E68-4E84-B927-AEE2CAE2EF9E" 756 | } 757 | }, 758 | { 759 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 760 | "WFWorkflowActionParameters": { 761 | "GroupingIdentifier": "EC701455-9422-4C8A-B801-FCBC00798EBD", 762 | "WFInput": { 763 | "Type": "Variable", 764 | "Variable": { 765 | "Value": { 766 | "OutputUUID": "21BFF667-5E68-4E84-B927-AEE2CAE2EF9E", 767 | "Type": "ActionOutput", 768 | "OutputName": "用户配置文件数量" 769 | }, 770 | "WFSerializationType": "WFTextTokenAttachment" 771 | } 772 | }, 773 | "WFControlFlowMode": 0, 774 | "WFNumberValue": "0", 775 | "WFCondition": 4 776 | } 777 | }, 778 | { 779 | "WFWorkflowActionIdentifier": "is.workflow.actions.setvariable", 780 | "WFWorkflowActionParameters": { 781 | "WFInput": { 782 | "Value": { 783 | "OutputUUID": "F68303F6-8B95-44DD-B707-EA9B956E247E", 784 | "Type": "ActionOutput", 785 | "OutputName": "真" 786 | }, 787 | "WFSerializationType": "WFTextTokenAttachment" 788 | }, 789 | "WFVariableName": "覆盖用户配置" 790 | } 791 | }, 792 | { 793 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 794 | "WFWorkflowActionParameters": { 795 | "GroupingIdentifier": "EC701455-9422-4C8A-B801-FCBC00798EBD", 796 | "WFControlFlowMode": 2 797 | } 798 | }, 799 | { 800 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 801 | "WFWorkflowActionParameters": { 802 | "GroupingIdentifier": "A305F3B4-AD83-441E-863B-D3608B33AC5D", 803 | "WFInput": { 804 | "Type": "Variable", 805 | "Variable": { 806 | "Value": { 807 | "VariableName": "覆盖用户配置", 808 | "Type": "Variable" 809 | }, 810 | "WFSerializationType": "WFTextTokenAttachment" 811 | } 812 | }, 813 | "WFControlFlowMode": 0, 814 | "WFNumberValue": "0", 815 | "WFCondition": 2 816 | } 817 | }, 818 | { 819 | "WFWorkflowActionIdentifier": "is.workflow.actions.gettext", 820 | "WFWorkflowActionParameters": { 821 | "WFTextActionText": "patch:\n schema_list:\n - schema: jiandao", 822 | "UUID": "60069AF5-6306-44CE-80B9-1183D78DBF1A" 823 | } 824 | }, 825 | { 826 | "WFWorkflowActionIdentifier": "is.workflow.actions.documentpicker.save", 827 | "WFWorkflowActionParameters": { 828 | "WFFolder": { 829 | "Value": { 830 | "VariableName": "仓输入法目录", 831 | "Type": "Variable" 832 | }, 833 | "WFSerializationType": "WFTextTokenAttachment" 834 | }, 835 | "WFAskWhereToSave": false, 836 | "WFInput": { 837 | "Value": { 838 | "OutputUUID": "60069AF5-6306-44CE-80B9-1183D78DBF1A", 839 | "Type": "ActionOutput", 840 | "OutputName": "文本" 841 | }, 842 | "WFSerializationType": "WFTextTokenAttachment" 843 | }, 844 | "UUID": "5A4E890E-F63D-44F6-AAD4-1C51B1E2D6D5", 845 | "WFSaveFileOverwrite": true, 846 | "WFFileDestinationPath": "/Rime/default.custom.yaml" 847 | } 848 | }, 849 | { 850 | "WFWorkflowActionIdentifier": "is.workflow.actions.file.rename", 851 | "WFWorkflowActionParameters": { 852 | "WFFile": { 853 | "Value": { 854 | "OutputUUID": "5A4E890E-F63D-44F6-AAD4-1C51B1E2D6D5", 855 | "Type": "ActionOutput", 856 | "OutputName": "已存储的文件" 857 | }, 858 | "WFSerializationType": "WFTextTokenAttachment" 859 | }, 860 | "WFNewFilename": "default.custom.yaml", 861 | "UUID": "BE4195B4-1195-482A-A6DF-423955B4D7D7" 862 | } 863 | }, 864 | { 865 | "WFWorkflowActionIdentifier": "is.workflow.actions.conditional", 866 | "WFWorkflowActionParameters": { 867 | "WFControlFlowMode": 2, 868 | "GroupingIdentifier": "A305F3B4-AD83-441E-863B-D3608B33AC5D", 869 | "UUID": "8CAB0A0B-333A-443F-A9D6-7753CFDF5DCB" 870 | } 871 | }, 872 | { 873 | "WFWorkflowActionIdentifier": "dev.fuxiao.app.Hamster.ShortcutRimeDeploy", 874 | "WFWorkflowActionParameters": { 875 | "UUID": "BF26941F-92E3-4E09-8307-076AD4311DB4", 876 | "AppIntentDescriptor": { 877 | "TeamIdentifier": "M4N6995A28", 878 | "BundleIdentifier": "dev.fuxiao.app.Hamster", 879 | "Name": "Hamster", 880 | "AppIntentIdentifier": "ShortcutRimeDeploy" 881 | } 882 | } 883 | } 884 | ], 885 | "WFWorkflowInputContentItemClasses": [ 886 | "WFAppContentItem", 887 | "WFAppStoreAppContentItem", 888 | "WFArticleContentItem", 889 | "WFContactContentItem", 890 | "WFDateContentItem", 891 | "WFEmailAddressContentItem", 892 | "WFFolderContentItem", 893 | "WFGenericFileContentItem", 894 | "WFImageContentItem", 895 | "WFiTunesProductContentItem", 896 | "WFLocationContentItem", 897 | "WFDCMapsLinkContentItem", 898 | "WFAVAssetContentItem", 899 | "WFPDFContentItem", 900 | "WFPhoneNumberContentItem", 901 | "WFRichTextContentItem", 902 | "WFSafariWebPageContentItem", 903 | "WFStringContentItem", 904 | "WFURLContentItem" 905 | ], 906 | "WFWorkflowImportQuestions": [ 907 | { 908 | "Category": "Parameter", 909 | "ParameterKey": "WFTextActionText", 910 | "ActionIndex": 1, 911 | "Text": "提示", 912 | "DefaultValue": "⚠️注意⚠️\n\n运行前:\n\n❗️需要安装仓输入法,且新版本的仓输入法才能自动重新部署\n❗️请根据提示选择仓输入法的顶层目录\n\n运行过程中:\n\n❗️需要授权此快捷指令访问相应网址才能下载键道方案\n❗️需要授权此快捷指令访问仓输入法目录才能储存方案文件\n❗️需要授权此快捷指令运行仓输入法提供的指令才能自动重新部署" 913 | }, 914 | { 915 | "Category": "Parameter", 916 | "ParameterKey": "WFFile", 917 | "ActionIndex": 2, 918 | "Text": "请选择🐹️仓输入法顶层目录", 919 | "DefaultValue": { 920 | "fileLocation": { 921 | "WFFileLocationType": "LocalStorage", 922 | "fileProviderDomainID": "com.apple.FileProvider.LocalStorage", 923 | "relativeSubpath": "Documents", 924 | "appContainerBundleIdentifier": "dev.fuxiao.app.Hamster", 925 | "crossDeviceItemID": "deviceSpecific:0C4C9424-F28C-4211-A565-6B71473E1E37:fp:/IjLAdmIb5URuxHItBKIaW4YW29o8YkBSVFW9oOfts0w=/com.apple.FileProvider.LocalStorage//#dev.fuxiao.app.Hamster" 926 | }, 927 | "filename": "Documents", 928 | "displayName": "Hamster" 929 | } 930 | } 931 | ], 932 | "WFWorkflowTypes": [ 933 | "Watch" 934 | ], 935 | "WFQuickActionSurfaces": [], 936 | "WFWorkflowHasShortcutInputVariables": false 937 | } --------------------------------------------------------------------------------