Created
November 5, 2023 09:24
-
-
Save amorphobia/79f7e1a0d8bc4b524b1bee3d3d4c12c7 to your computer and use it in GitHub Desktop.
格道双拼-仓
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Rime schema | |
# encoding: utf-8 | |
schema: | |
schema_id: gedao | |
name: 格道双拼 | |
version: "1.0.0" | |
author: | |
- fkxxyz (四叶草拼音词库) | |
- 吅吅大牛 (格道17键双拼布局) | |
- amorphobia | |
description: | | |
格道双拼 | |
由四叶草拼音词库、格道17键双拼布局共同驱动 | |
dependencies: | |
- clover | |
switches: | |
- name: ascii_mode | |
reset: 0 | |
states: [ "中", "英" ] | |
- name: full_shape | |
states: [ "半", "全" ] | |
- name: zh_simp_s2t | |
reset: 0 | |
states: [ "简", "繁" ] | |
- name: emoji | |
reset: 1 | |
states: [ "🈚️", "🈶️" ] | |
- name: symbols | |
reset: 1 | |
states: [ "无", "符" ] | |
engine: | |
processors: | |
- ascii_composer | |
- recognizer | |
- key_binder | |
- speller | |
- punctuator | |
- selector | |
- navigator | |
- express_editor | |
segmentors: | |
- ascii_segmentor | |
- matcher | |
- abc_segmentor | |
- punct_segmentor | |
- fallback_segmentor | |
translators: | |
- punct_translator | |
- script_translator | |
- table_translator@user_phrases | |
filters: | |
- simplifier | |
- simplifier@emoji | |
- simplifier@symbols | |
- uniquifier | |
- lua_filter@*gedao_filter | |
speller: | |
alphabet: "zscfwmldynjtpqgbxviu" | |
initials: "zscfwmldynjtpqgbx" | |
delimiter: " 'viu" | |
algebra: | |
- xform/^([jqxy])u$/$1v/ | |
- xform/^zh/Z/ | |
- xform/^sh/S/ | |
- xform/^ch/C/ | |
- xform/^z/F/ | |
- xform/^s/W/ | |
- xform/^c/M/ | |
- xform/^h/N/ | |
- xform/^r/T/ | |
- xform/^k/P/ | |
- xform/^([aoe])([iounr])/Q$1$2/ | |
- xform/^([aoe])(ng?)?/Q$1$2/ | |
- xform/iang/Z/ | |
- xform/uang/Q/ | |
- xform/ang/F/ | |
- xform/ian/Q/ | |
- xform/uan/M/ | |
- xform/an/W/ | |
- xform/uai/P/ | |
- xform/ai/L/ | |
- xform/iao/X/ | |
- xform/ao/B/ | |
- xform/ia/C/ | |
- xform/ua/F/ | |
- xform/a/C/ | |
- xform/iong/B/ | |
- xform/ong/T/ | |
- xform/ou/X/ | |
- xform/uo/Y/ | |
- xform/o/M/ | |
- xform/eng/S/ | |
- xform/en/Z/ | |
- xform/ei/P/ | |
- xform/er/F/ | |
- xform/ie/S/ | |
- xform/ue/L/ | |
- xform/ve/X/ | |
- xform/e/N/ | |
- xform/ing/Y/ | |
- xform/in/G/ | |
- xform/iu/T/ | |
- xform/ui/G/ | |
- xform/i/J/ | |
- xform/un/P/ | |
- xform/u/D/ | |
- xform/v/M/ | |
- xlit/ZSCFWMLDYNJTPQGBX/zscfwmldynjtpqgbx/ | |
translator: | |
dictionary: clover | |
# prism: clover | |
# enable_sentence: true | |
# enable_user_dict: true | |
# enable_encoder: true | |
# enable_commit_history: true | |
# enable_completion: true | |
# db_class: tabledb | |
user_phrases: | |
dictionary: "" | |
user_dict: gedao_user | |
db_class: tabledb | |
enable_sentence: false | |
initial_quality: 0 | |
punctuator: | |
import_preset: default | |
key_binder: | |
import_preset: default | |
simplifier: | |
option_name: zh_simp_s2t | |
opencc_config: s2tg.json | |
emoji: | |
opencc_config: emoji.json | |
option_name: emoji | |
tips: all | |
symbols: | |
opencc_config: symbol.json | |
option_name: symbols | |
tips: all | |
recodnizer: | |
import_preset: default | |
menu: | |
page_size: 9 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local function pinyin_to_shuangpin(py) | |
if not py then | |
return nil | |
end | |
py = py:gsub("^([jqxy])u$", "%1v") | |
py = py:gsub("^zh", "Z") | |
py = py:gsub("^sh", "S") | |
py = py:gsub("^ch", "C") | |
py = py:gsub("^z", "F") | |
py = py:gsub("^s", "W") | |
py = py:gsub("^c", "M") | |
py = py:gsub("^h", "N") | |
py = py:gsub("^r", "T") | |
py = py:gsub("^k", "P") | |
py = py:gsub("^([aoe])([iounr])", "Q%1%2") | |
py = py:gsub("^([aoe])(ng?)", "Q%1%2") | |
py = py:gsub("^([aoe])", "Q%1") | |
py = py:gsub("iang", "Z") | |
py = py:gsub("uang", "Q") | |
py = py:gsub("ang", "F") | |
py = py:gsub("ian", "Q") | |
py = py:gsub("uan", "M") | |
py = py:gsub("an", "W") | |
py = py:gsub("uai", "P") | |
py = py:gsub("ai", "L") | |
py = py:gsub("iao", "X") | |
py = py:gsub("ao", "B") | |
py = py:gsub("ia", "C") | |
py = py:gsub("ua", "F") | |
py = py:gsub("a", "C") | |
py = py:gsub("iong", "B") | |
py = py:gsub("ong", "T") | |
py = py:gsub("ou", "X") | |
py = py:gsub("uo", "Y") | |
py = py:gsub("o", "M") | |
py = py:gsub("eng", "S") | |
py = py:gsub("en", "Z") | |
py = py:gsub("ei", "P") | |
py = py:gsub("er", "F") | |
py = py:gsub("ie", "S") | |
py = py:gsub("ue", "L") | |
py = py:gsub("ve", "X") | |
py = py:gsub("e", "N") | |
py = py:gsub("ing", "Y") | |
py = py:gsub("in", "G") | |
py = py:gsub("iu", "T") | |
py = py:gsub("ui", "G") | |
py = py:gsub("i", "J") | |
py = py:gsub("un", "P") | |
py = py:gsub("u", "D") | |
py = py:gsub("v", "M") | |
return py:lower() | |
end | |
local function correct_preedit(text, inp, db) | |
if not db then | |
return nil | |
end | |
if inp:len() < 2 then | |
return nil | |
end | |
local inp = inp:sub(1, 2) | |
local lookup = db:lookup(text) | |
for pinyin in lookup:gmatch("(%w+)%s?") do | |
local shuangpin = pinyin_to_shuangpin(pinyin) | |
if shuangpin and shuangpin == inp then | |
pinyin = pinyin:gsub("lv", "lü") | |
pinyin = pinyin:gsub("nv", "nü") | |
return pinyin | |
end | |
end | |
return nil | |
end | |
local function filter(input, env) | |
local input_text = env.engine.context.input | |
for cand in input:iter() do | |
local cand_inp = input_text:sub(cand.start + 1, cand._end) | |
if utf8.len(cand.text) == 1 then | |
local preedit = correct_preedit(cand.text, cand_inp, env.pinyin_db) | |
if preedit then | |
if cand_inp:len() > 2 then | |
preedit = preedit .. "." .. cand_inp:sub(3) | |
end | |
if cand._end < input_text:len() then | |
preedit = preedit .. " " | |
end | |
cand:get_genuine().preedit = preedit | |
end | |
else | |
-- assume phrases do not have any strokes | |
local preedit = "" | |
local i = 0 | |
for text in cand.text:gmatch(utf8.charpattern) do | |
i = i + 1 | |
local inp = cand_inp:sub(i*2-1, i*2) | |
local char_preedit = correct_preedit(text, inp, env.pinyin_db) | |
if char_preedit and preedit:len() > 0 then | |
preedit = preedit .. " " | |
end | |
if char_preedit then | |
preedit = preedit .. char_preedit | |
else | |
preedit = preedit .. inp | |
end | |
end | |
cand.preedit = preedit | |
end | |
yield(cand) | |
end | |
end | |
local function init(env) | |
env.pinyin_db = ReverseDb("build/clover.reverse.bin") | |
end | |
return { init = init, func = filter } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
keyboards: | |
- name: 格道 | |
rows: | |
- keys: | |
- action: character(z) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: zh | |
swipe: | |
- action: character(1) | |
label: en | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(!) | |
label: iang | |
display: true | |
processByRIME: true | |
direction: down | |
- action: tab | |
display: true | |
processByRIME: true | |
direction: right | |
- action: character(s) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: sh | |
swipe: | |
- action: character(2) | |
label: eng | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(@) | |
label: ie | |
display: true | |
processByRIME: true | |
direction: down | |
- action: shortCommand(#上个输入方案) | |
display: true | |
processByRIME: true | |
direction: left | |
- action: shortCommand(#RimeSwitcher) | |
display: true | |
processByRIME: true | |
direction: right | |
- action: character(c) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: ch | |
swipe: | |
- action: character(3) | |
label: a | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(#) | |
label: ia | |
display: true | |
processByRIME: true | |
direction: down | |
- action: none | |
width: | |
portrait: percentage(0.01) | |
landscape: percentage(0.1) | |
- action: character(f) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: z f | |
swipe: | |
- action: character(0) | |
label: ang | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character()) | |
label: ua er | |
display: true | |
processByRIME: true | |
direction: down | |
- action: character(w) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: s w | |
swipe: | |
- action: character(-) | |
label: an | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(_) | |
display: false | |
processByRIME: true | |
direction: down | |
- action: character(m) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: c m | |
swipe: | |
- action: character(=) | |
label: o | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(+) | |
label: uan ü | |
display: true | |
processByRIME: true | |
direction: down | |
- keys: | |
- action: character(l) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: l | |
swipe: | |
- action: character(4) | |
label: ue | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character($) | |
label: ai | |
display: true | |
processByRIME: true | |
direction: down | |
- action: character(`) | |
display: true | |
processByRIME: true | |
direction: right | |
- action: character(d) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: d | |
swipe: | |
- action: character(5) | |
label: u | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(%) | |
display: false | |
processByRIME: true | |
direction: down | |
- action: character(y) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: y | |
swipe: | |
- action: character(6) | |
label: ing | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(^) | |
label: uo | |
display: true | |
processByRIME: true | |
direction: down | |
- action: none | |
width: | |
portrait: percentage(0.01) | |
landscape: percentage(0.1) | |
- action: character(n) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: n h | |
swipe: | |
- action: character([) | |
label: e | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character({) | |
display: false | |
processByRIME: true | |
direction: down | |
- action: character(j) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: j | |
swipe: | |
- action: character(]) | |
label: i | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(}) | |
display: false | |
processByRIME: true | |
direction: down | |
- action: character(t) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: t r | |
swipe: | |
- action: character(\) | |
label: ong | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(|) | |
label: iu | |
display: true | |
processByRIME: true | |
direction: down | |
- keys: | |
- action: character(p) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: p k | |
swipe: | |
- action: character(7) | |
label: ei | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(&) | |
label: un uai | |
display: true | |
processByRIME: true | |
direction: down | |
- action: character(~) | |
display: true | |
processByRIME: true | |
direction: right | |
- action: character(q) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: q ' | |
swipe: | |
- action: character(8) | |
label: ian | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(*) | |
label: uang | |
display: true | |
processByRIME: true | |
direction: down | |
- action: character(g) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: g | |
swipe: | |
- action: character(9) | |
label: in | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(() | |
label: ui | |
display: true | |
processByRIME: true | |
direction: down | |
- action: none | |
width: | |
portrait: percentage(0.01) | |
landscape: percentage(0.1) | |
- action: character(b) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: b | |
swipe: | |
- action: character(<) | |
label: iong | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(>) | |
label: ao | |
display: true | |
processByRIME: true | |
direction: down | |
- action: character(x) | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
label: x | |
swipe: | |
- action: character(;) | |
label: iao | |
display: true | |
processByRIME: true | |
direction: up | |
- action: character(:) | |
label: ou üe | |
display: true | |
processByRIME: true | |
direction: down | |
- action: character(') | |
display: true | |
processByRIME: true | |
direction: left | |
- action: character(") | |
display: true | |
processByRIME: true | |
direction: right | |
- action: backspace | |
width: | |
portrait: percentage(0.165) | |
landscape: percentage(0.1) | |
swipe: | |
- action: shortCommand(#重输) | |
display: true | |
processByRIME: true | |
direction: left | |
- keys: | |
- action: keyboardType(alphabetic) | |
width: | |
portrait: percentage(0.2) | |
landscape: percentage(0.1) | |
swipe: | |
- action: keyboardType(custom(36键)) | |
display: true | |
processByRIME: true | |
direction: up | |
- action: keyboardType(numericNineGrid) | |
display: true | |
processByRIME: true | |
direction: right | |
- action: character(,) | |
width: percentage(0.1) | |
swipe: | |
- action: character(.) | |
display: true | |
processByRIME: true | |
direction: up | |
- action: space | |
width: | |
portrait: percentage(0.4) | |
landscape: percentage(0.1) | |
swipe: | |
- action: shortCommand(#次选上屏) | |
display: true | |
processByRIME: true | |
direction: up | |
- action: shortCommand(#左移) | |
display: true | |
processByRIME: true | |
direction: left | |
- action: shortCommand(#右移) | |
display: true | |
processByRIME: true | |
direction: right | |
- action: character(/) | |
width: percentage(0.1) | |
swipe: | |
- action: character(?) | |
display: true | |
processByRIME: true | |
direction: up | |
- action: enter | |
width: | |
portrait: percentage(0.2) | |
landscape: percentage(0.1) | |
swipe: | |
- action: shortCommand(#换行) | |
display: true | |
processByRIME: true | |
direction: up | |
buttonInsets: left(3),bottom(4),top(8),right(3) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment