pinchord-31-2.py

Pinchord · pinchord.git · Tickets · Changelog

Branches > serial-mods > 2ad09cb > files / plover_pinchord_31 / dictionaries / pinchord-31-2.py

## Pinchord Plover python dictionary
## Copyright Grahp under Pinchord's License (GNU GPL v2) https://grahp.dev/pinchord.git/LICENSE
import re

## Longest valid outline, Pinchord only needs one stroke outlines :)
LONGEST_KEY = 1

BANKS = ["initials", "vowels", "finals"]

## Unlike Shrimple, Pinchord enumerates all bank chords!
DICT = {"initials": {"WH&": "hw",
                     "T": "t",
                     "TSP&": "sk",
                     "TS&": "ts",
                     "TSPHR": "scl",
                     "TP": "f",
                     "TSWR": "kr",
                     "THR": "thr",
                     "TPR": "fr",
                     "HR&": "ll",
                     "PWR": "br",
                     "TSPR": "scr",
                     "TSWH": "kn",
                     "TWH": "thw",
                     "SHR&": "shr",
                     "TP&": "ph",
                     "PWHR": "bl",
                     "TPH&": "mn",
                     "TPR&": "phr",
                     "SPWHR&": "chl",
                     "SPWHR": "cl",
                     "TS": "st",
                     "SW&": "sv",
                     "SPR": "spr",
                     "SWHR": "squ",
                     "HR": "l",
                     "WH": "wh",
                     "TW": "tw",
                     "S": "s",
                     "SR": "v",
                     "TPWR": "dr",
                     "TSH": "sth",
                     "H": "h",
                     "PR": "pr",
                     "TSPWR": "gr",
                     "SHR": "sl",
                     "TSR&": "tz",
                     "SW": "sw",
                     "SWH": "z",
                     "TSPWH": "gh",
                     "TSPR&": "skr",
                     "R": "r",
                     "TPWH": "x",
                     "TSR": "str",
                     "TWHR": "j",
                     "SH": "sh",
                     "SPWR&": "chr",
                     "PH": "m",
                     "TSP": "sc",
                     "TR": "tr",
                     "P": "p",
                     "SH&": "sch",
                     "TPHR": "fl",
                     "TPHR&": "phl",
                     "TH": "th",
                     "WR": "wr",
                     "SP&": "sph",
                     "SPWR": "cr",
                     "SPH": "sm",
                     "SPH&": "schm",
                     "TSW": "k",
                     "SR&": "vr",
                     "SPHR": "spl",
                     "TSPWHR": "gl",
                     "SWR": "y",
                     "TSWHR": "kl",
                     "SPW": "c",
                     "WHR&": "q",
                     "PHR": "pl",
                     "SPWH": "ch",
                     "TSPW": "g",
                     "W": "w",
                     "R&": "rh",
                     "SP": "sp",
                     "TSPH": "sn",
                     "TPH": "n",
                     "TPW": "d",
                     "WHR": "qu",
                     "PW": "b"},
        "vowels": {"OU": "ou",
                   "OU^": "uo",
                   "AU": "au",
                   "AOI": "ei",
                   "AU^": "ua",
                   "IU": "e",
                   "AOU^": "iu",
                   "IU^": "ee",
                   "AIU": "ea",
                   "AO^": "ao",
                   "O^": "oo",
                   "A^": "aa",
                   "U^": "ue",
                   "I^": "eu",
                   "AOU": "ui",
                   "OI^": "io",
                   "U": "u",
                   "AI^": "ia",
                   "O": "o",
                   "AO": "oa",
                   "A": "a",
                   "AIU^": "ae",
                   "I": "i",
                   "OIU^": "oe",
                   "OIU": "eo",
                   "AOI^": "ie",
                   "OI": "oi",
                   "^": "y",
                   "AI": "ai",
                   "-": ""},
        "finals": {"RPF*": "rw",
                   "T": "t",
                   "RPKS*": "rsc",
                   "LPF*": "wl",
                   "LPKF": "ld",
                   "LKT": "hl",
                   "LRK*": "nck",
                   "K": "k",
                   "RPT": "rpt",
                   "LRKS*": "nsk",
                   "T*": "tt",
                   "LF*": "fl",
                   "LRPKFST": "ncy",
                   "LRPKFST*": "ngth",
                   "LPS": "lm",
                   "LPS*": "'m",
                   "KFS*": "gh",
                   "LRPKF*": "ddl",
                   "LPKS": "lc",
                   "RPS": "rm",
                   "KFT*": "ction",
                   "PKFS": "g",
                   "LRS": "ns",
                   "RT": "rt",
                   "RT*": "rnt",
                   "KS*": "sk",
                   "LPKFST": "lcy",
                   "LR*": "rly",
                   "PFS": "z",
                   "KFS": "sh",
                   "LRPKFT": "nky",
                   "RPKF*": "rld",
                   "LK*": "lck",
                   "RPKF": "rd",
                   "RKFT*": "stian",
                   "KF": "ch",
                   "LFST*": "lfth",
                   "LRPFS": "nz",
                   "RPF": "rn",
                   "K*": "ck",
                   "ST*": "ts",
                   "LPFT": "ly",
                   "RPKFS*": "dg",
                   "RFT*": "stion",
                   "PKT": "ph",
                   "LPKT": "lph",
                   "RPKT": "rph",
                   "LRPKT": "mph",
                   "PKT*": "hp",
                   "LPKT*": "'ll",
                   "LRPKT*": "'d",
                   "RPKT*": "'re",
                   "F*": "ff",
                   "LRKF*": "nsion",
                   "L": "l",
                   "LKST": "lxt",
                   "LRFS": "nv",
                   "LRPKST": "nct",
                   "PFS*": "zz",
                   "LRKT": "hn",
                   "PKF*": "dd",
                   "RPKS": "rc",
                   "LP*": "pl",
                   "LRKFS": "nsh",
                   "PKS": "c",
                   "RKFS": "rsh",
                   "LRST": "nst",
                   "RKST*": "rj",
                   "LRPFT": "ny",
                   "LS": "ls",
                   "LS*": "'s",

                   "KFST": "ty",
                   "LKFST": "lty",
                   "LKFST*": "y'd",
                   "LRKFST": "nty",
                   "RKFST": "rty",

                   "PFT*": "ption",
                   "PS*": "sp",
                   "KT": "h",
                   "KT*": "hh",
                   "LT": "lt",
                   "LST": "lst",
                   "LST*": "t's",
                   "S*": "ss",
                   "PK": "b",
                   "PT": "pt",
                   "PKS*": "sc",
                   "PF": "n",
                   "RPK": "rb",
                   "LRFST*": "ndth",
                   "LRPFT*": "nny",
                   "RFS": "rv",
                   "S": "s",
                   "LFT": "lft",
                   "LRKST*": "nj",
                   "KST*": "j",
                   "LKS*": "lsk",
                   "LF": "lf",
                   "LRF": "nf",
                   "R*": "rr",
                   "RPKST": "rct",
                   "LRKF": "nch",
                   "LPKFS": "lg",
                   "LRK": "nk",
                   "LRP*": "mpl",
                   "FT": "ft",
                   "PKFST": "cy",
                   "LPFT*": "lly",
                   "R": "r",
                   "LRFST": "nth",
                   "F": "f",
                   "LRKFT": "ntch",
                   "FST*": "fth",
                   "RF": "rf",
                   "LRFT*": "ntion",
                   "LRPK": "mb",
                   "RPFS": "rz",
                   "LRT": "nt",
                   "LRT*": "n't",
                   "LP": "lp",
                   "RPKFT": "rky",
                   "LRKFT*": "nction",
                   "LFS": "lv",
                   "LFS*": "'ve",
                   "LKFT*": "sion",
                   "KFST*": "ght",
                   "LRPS": "mn",
                   "LK": "lk",
                   "LPT": "lpt",
                   "PS": "m",
                   "RKF": "rch",
                   "RK*": "rck",
                   "FT*": "tion",
                   "LPF": "ln",
                   "LR": "rl",
                   "P": "p",
                   "LRPKFS": "ng",
                   "LRPF": "nn",
                   "RKS": "rx",
                   "LKFS": "lsh",
                   "RK": "rk",
                   "LT*": "ttl",
                   "LFT*": "ltion",
                   "LRFT": "nft",
                   "RKS*": "rsk",
                   "LKST*": "lj",
                   "LRP": "mp",
                   "LPK": "lb",
                   "LPKFT": "lky",
                   "LRPT": "mpt",
                   "KFT": "tch",
                   "LRPK*": "bbl",
                   "PKFST*": "sy",
                   "KS": "x",
                   "PF*": "w",
                   "RP": "rp",
                   "RKST": "rxt",
                   "LPKFT*": "lcky",
                   "LRPKS": "nc",
                   "RFT": "rft",
                   "LPKST": "lct",
                   "PKST": "ct",
                   "PKST*": "kt",
                   "LPKST*": "lkt",
                   "LRPKST*": "nkt",
                   "RPKST*": "rkt",
                   "FS": "v",
                   "PKFS*": "gg",
                   "PKFT*": "cky",
                   "RPKFS": "rg",
                   "RPFT*": "rry",
                   "RST": "rst",
                   "LRPKF": "nd",
                   "FST": "th",
                   "FS*": "vv",
                   "ST": "st",
                   "LPKF*": "ndl",
                   "LPKS*": "lsc",
                   "RPKFT*": "rcky",
                   "KF*": "q",
                   "KST": "xt",
                   "LKFT": "ltch",
                   "LRF*": "fn",
                   "LRPKFS*": "gn",
                   "RPFT": "ry",
                   "LRKS": "nx",
                   "PKFT": "ky",
                   "PKF": "d",
                   "RFST*": "rmth",
                   "LPKFS*": "gl",
                   "RKFT": "rtch",
                   "LRPF*": "wn",
                   "RFST": "rth",
                   "LKS": "lx",
                   "PFT": "y",
                   "LRPS*": "gm",
                   "P*": "pp",
                   "LKF": "lch",
                   "RKT": "hr",
                   "L*": "ll",
                   "LPK*": "bl",
                   "RS": "rs",
                   "LRPKS*": "nsc",
                   "LRKST": "nxt",
                   "RPKFST": "rcy",
                   "LPFS": "lz",
                   "LRPKFT*": "ncky",
                   "LFST": "lth"}}

BANK_SPLITTING_REGEX = r"(T?S?P?W?H?R?&?)(A?O?I?U?\^?\-?)(L?R?P?K?F?S?T?\*?)"

def banks(stroke):
    match = re.fullmatch(BANK_SPLITTING_REGEX, stroke)
    if match:
        initials, vowels, finals = match.groups()
        return {"initials": initials, "vowels": vowels, "finals": finals}
    else:
        return None

def build_translation(stroke_banks):
    translation = ""
    for bank in BANKS:
        keys = stroke_banks.get(bank) or ""
        translation += DICT[bank].get(keys, keys)
    return translation

def lookup_stroke(stroke):
    stroke_banks = banks(stroke)
    if stroke_banks:
        return build_translation(stroke_banks)
    else:
        raise KeyError(stroke)

def lookup(outline):
    if len(outline) > LONGEST_KEY:
        raise KeyError(outline)
    else:
        stroke = outline[0]
        return lookup_stroke(stroke)