pinchord-v26.0.1.py
Pinchord · pinchord.git · Tickets · Changelog
Branches > serial-mods > 9422e79 > files / plover_pinchord / dictionaries / pinchord-v26.0.1.py
## Pinchord Plover python dictionary
import re
## Longest valid outline, Pinchord only needs one stroke outlines :)
LONGEST_KEY = 1
## TODO move this into the dict, or just wait until chords.edn is the dictionary format?
BANKS = ["prefixes", "initials", "vowels", "finals", "suffixes"]
## Specified by 'chords.edn' (https://grahp.dev/pinchord.git/chords.edn)
## Unlike Shrimple, Pinchord enumerates all bank chords!
DICT = {
"prefixes": {
"+": "{^}",
"#": "{-|}",
"#+": "{^-|}",
"": "{}",
},
"initials": {
"T": "t",
"TSP&": "sk",
"TP": "f",
"TP&": "ph",
"TSWR": "kr",
"THR": "thr",
"TPR": "fr",
"PWR": "br",
"SH&": "sch",
"TSPR": "scr",
"TSPR&": "skr",
"TSWH": "kn",
"TWH": "thw",
"PWHR": "bl",
"SPWHR": "cl",
"TS": "st",
"TS&": "ts",
"TSH": "sth",
"SPR": "spr",
"SHR&": "shr",
"HR": "l",
"HR&": "ll",
"WH": "wh",
"TW": "tw",
"S": "s",
"SR": "v",
"SR&": "vr",
"TPWR": "dr",
"TPWH": "x",
"H": "h",
"PR": "pr",
"TSPWR": "gr",
"SHR": "sl",
"SW": "sw",
"SW&": "sv",
"SWR": "y",
"TSPWH": "gh",
"R": "r",
"R&": "rh",
"SWHR": "squ",
"TSR": "str",
"TSR&": "tz",
"TWHR": "j",
"SH": "sh",
"PH": "m",
"TSP": "sc",
"TR": "tr",
"P": "p",
"WHR": "qu",
"WHR&": "q",
"TPHR": "fl",
"TPHR&": "phl",
"TPR&": "phr",
"TH": "th",
"WR": "wr",
"SPWR": "cr",
"SPH": "sm",
"TSW": "k",
"SPHR": "spl",
"TSPWHR": "gl",
"TSWHR": "kl",
"SPW": "c",
"SWH": "z",
"PHR": "pl",
"SPWH": "ch",
"TSPW": "g",
"W": "w",
"SP": "sp",
"TSPH": "sn",
"TPH": "n",
"TPH&": "mn",
"TPW": "d",
"PW": "b",
},
"vowels": {
"OU": "ou",
"AU": "au",
"AOI": "ei",
"AO": "oa",
"AO^": "ao",
"AU^": "ua",
"AI^": "ia",
"IU^": "ee",
"IU": "e",
"AIU": "ea",
"OI^": "io",
"AIU^": "ae",
"AOU": "ui",
"AOI^": "ie",
"U": "u",
"O": "o",
"O^": "oo",
"A": "a",
"A^": "aa",
"I": "i",
"I^": "eu",
"^": "y",
"OIU": "eo",
"OIU^": "oe",
"AOU^": "iu",
"OI": "oi",
"U^": "ue",
"AI": "ai",
"-": "{^}",
},
"finals": {
"FS": "v",
"FS*": "vv",
"LFS": "lv",
"LRFS": "nv",
"RFS": "rv",
"KFS": "sh",
"LKFS": "lsh",
"LRKFS": "nsh",
"RKFS": "rsh",
"PST": "w",
"L": "l",
"LR": "rl",
"LR*": "rly",
"R": "r",
"P": "p",
"LP": "lp",
"LP*": "pl",
"LRP": "mp",
"RP": "rp",
"PK": "b",
"LPK": "lb",
"LRPK": "mb",
"RPK": "rb",
"PF": "n",
"LPF": "ln",
"LRPF": "nn",
"RPF": "rn",
"PKFS": "g",
"LPKFS": "lg",
"LPKFS*": "gl",
"LRPKFS": "ng",
"LRPKFS*": "gn",
"RPKFS": "rg",
"RPKFS*": "dg",
"KFS*": "gh",
"KFST*": "ght",
"F": "f",
"F*": "ff",
"LF": "lf",
"LRF": "nf",
"LRF*": "fn",
"RF": "rf",
"PFT": "y",
"PFT*": "yy",
"LPFT": "ly",
"RPFT*": "nly",
"LRPFT*": "nny",
"LPFT*": "lly",
"RPFT": "ry",
"LRPFT": "ny",
"PKST": "ct",
"LPKST": "lct",
"LRPKST": "nct",
"RPKST": "rct",
"PKF": "d",
"LPKF": "ld",
"LRPKF": "nd",
"RPKF": "rd",
"PKF*": "dd",
"LPKF*": "ndl",
"LRPKF*": "ddl",
"RPKF*": "rld",
"KS": "x",
"RKS": "rx",
"LKS": "lx",
"LRKS": "nx",
"KST": "xt",
"RKST": "rxt",
"LKST": "lxt",
"LRKST": "nxt",
"KF": "ch",
"LKF": "lch",
"LRKF": "nch",
"RKF": "rch",
"K": "k",
"K*": "ck",
"LK*": "lck",
"LRK*": "nck",
"RK*": "rck",
"LK": "lk",
"LRK": "nk",
"RK": "rk",
"S": "s",
"LS": "ls",
"LRS": "ns",
"RS": "rs",
"PS": "m",
"LPS": "lm",
"LRPS": "mn",
"RPS": "rm",
"PFS": "z",
"LPFS": "lz",
"LRPFS": "nz",
"RPFS": "rz",
"T": "t",
"LT": "lt",
"LRT": "nt",
"RT": "rt",
"RT*": "rty",
"ST": "st",
"ST*": "ts",
"LST": "lst",
"LRST": "nst",
"RST": "rst",
"PT": "pt",
"LPT": "lpt",
"LRPT": "npt",
"RPT": "rpt",
"KT": "kt",
"KT*": "h",
"PKT*": "ph",
"PKT": "hp",
"LKT": "lkt",
"LRKT": "nkt",
"RKT": "rkt",
"FT": "ft",
"LFT": "lft",
"LRFT": "nft",
"RFT": "rft",
"KFT": "tch",
"LKFT": "ltch",
"LRKFT": "ntch",
"RKFT": "rtch",
"PKFT": "ky",
"LPKFT": "lky",
"LRPKFT": "nky",
"RPKFT": "rky",
"PKFT*": "cky",
"LPKFT*": "lcky",
"LRPKFT*": "ncky",
"RPKFT*": "rcky",
"L*": "ll",
"R*": "rr",
"P*": "pp",
"PF*": "w",
"LPF*": "wl",
"LRPF*": "wn",
"RPF*": "rw",
"LPK*": "bl",
"LRPK*": "bbl",
"PKFS*": "gg",
"KS*": "sk",
"RKS*": "rsk",
"LKS*": "lsk",
"LRKS*": "nsk",
"PKS*": "sc",
"LPKS*": "lsc",
"LRPKS*": "nsc",
"RPKS*": "rsc",
"KST*": "j",
"RKST*": "rj",
"LKST*": "lj",
"LRKST*": "nj",
"PKS": "c",
"LPKS": "lc",
"LRPKS": "nc",
"RPKS": "rc",
"S*": "ss",
"PS*": "sp",
"PFS*": "zz",
"T*": "tt",
"LT*": "ttl",
"FST": "th",
"LFST": "lth",
"LFST*": "lfth",
"LRFST": "nth",
"RFST": "rth",
"RFST*": "rmth",
"PKFST": "cy",
"PKFST*": "sy",
"LPKFST": "lcy",
"LRPKFST": "ncy",
"RPKFST": "rcy",
},
"suffixes": {
"e": "e",
"s": "s",
"es": "es",
}
}
BANK_SPLITTING_REGEX = r"(#?\+?)(T?S?P?W?H?R?&?)(A?O?I?U?\^?\-?)(L?R?P?K?F?S?T?\*?)(e?s?)"
EMTPY_TRANSLATION = ""
def banks(stroke):
match = re.match(BANK_SPLITTING_REGEX, stroke)
if match:
prefix, initials, vowels, finals, suffixes = match.groups()
return {"prefixes": prefix, "initials": initials, "vowels": vowels, "finals": finals, "suffixes": suffixes}
else:
return None
def build_translation(stroke_banks):
translation = ""
for bank in BANKS:
keys = stroke_banks.get(bank) or ""
translation += DICT[bank].get(keys, "")
return translation
def lookup_stroke(stroke):
stroke_banks = banks(stroke)
if stroke_banks:
return build_translation(stroke_banks)
else:
return EMTPY_TRANSLATION
def lookup(outline):
if len(outline) > LONGEST_KEY:
return EMTPY_TRANSLATION
else:
stroke = outline[0]
return lookup_stroke(stroke)