47c8174

Pinchord · pinchord.git · Tickets · Changelog

Branches > build-process > 47c8174 > files / CONTRIBUTING.md

Move bank chord definitions into :chords/bank-keys map in chords.edn

Grahp, 2026-09-05

Commit: 47c81746a507ea3e3dc72aad25f684c973d64dd3
Parent: fc28cd9

3 changed files:

chords.edn modified (view file)

@@ -6,343 +6,345 @@                     :finals "LRPKFST*"                     :suffixes "es"}  ;:keys "#+TSPWHR&AOIU^LRPKFST*es"- :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"-            "SPWHR&" "chl"-            "TS" "st"-            "TSH" "sth"-            "TS&" "ts"-            "SPR" "spr"-            "SHR&" "shr"-            "HR" "l"-            "HR&" "ll"-            "WH" "wh"-            "WH&" "hw" ; The two hwat?-            "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"-            "SPWR&" "chr"-            "SPH" "sm"-            "SPH&" "schm"-            "TSW" "k"-            "SPHR" "spl"-            "TSPWHR" "gl"-            "TSWHR" "kl"-            "SPW" "c"-            "SWH" "z"-            "PHR" "pl"-            "SPWH" "ch"-            "TSPW" "g"-            "W" "w"-            "SP" "sp"-            "SP&" "sph"-            "TSPH" "sn"-            "TSPHR" "scl"-            "TPH" "n"-            "TPH&" "mn"-            "TPW" "d"-            "PW" "b"-            "" "{^}"} - :vowels {"OU" "ou"-          "OU^" "uo"-          "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"}+ :chords/bank-chords {:prefixes {"#" "{-|}"+                                 "+" "{^}"+                                 ; TODO this isn't even valid syntax so it's clearly not being used at all+                                 #_["#+" "{^-|}"]} - :finals {"FS" "v"-          "FS*" "vv"-          "LFS" "lv"-          "LFS*" "'ve"-          "LRFS" "nv"-          "RFS" "rv"-          "KFS" "sh"-          "LKFS" "lsh"-          "LRKFS" "nsh"-          "RKFS" "rsh"-          "L" "l"-          "LR" "rl"-          "LR*" "rly"-          "R" "r"-          "P" "p"-          "LP" "lp"-          "LP*" "pl"-          "LRP" "mp"-          "LRP*" "mpl"-          "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"+                      :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"+                                 "SPWHR&" "chl"+                                 "TS" "st"+                                 "TSH" "sth"+                                 "TS&" "ts"+                                 "SPR" "spr"+                                 "SHR&" "shr"+                                 "HR" "l"+                                 "HR&" "ll"+                                 "WH" "wh"+                                 "WH&" "hw" ; The two hwat?+                                 "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"+                                 "SPWR&" "chr"+                                 "SPH" "sm"+                                 "SPH&" "schm"+                                 "TSW" "k"+                                 "SPHR" "spl"+                                 "TSPWHR" "gl"+                                 "TSWHR" "kl"+                                 "SPW" "c"+                                 "SWH" "z"+                                 "PHR" "pl"+                                 "SPWH" "ch"+                                 "TSPW" "g"+                                 "W" "w"+                                 "SP" "sp"+                                 "SP&" "sph"+                                 "TSPH" "sn"+                                 "TSPHR" "scl"+                                 "TPH" "n"+                                 "TPH&" "mn"+                                 "TPW" "d"+                                 "PW" "b"+                                 "" "{^}"} -          "KFST" "ty"-          "LKFST" "lty"-          "LKFST*" "y'd"-          "LRKFST" "nty"-          "RKFST" "rty"-          "KFST*" "ght"+                      :vowels {"OU" "ou"+                               "OU^" "uo"+                               "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"} -          "F" "f"-          "F*" "ff"-          "LF" "lf"-          "LF*" "fl"-          "LRF" "nf"-          "LRF*" "fn" ;; :garfsmie:-          "RF" "rf"-          "PFT" "y"-          "PFT*" "ption"-          "LPFT" "ly"-          "RPFT*" "rry" ; TODO this was wrong update it spooglypop-          ; -tz-          "LRPFT*" "nny"-          "LPFT*" "lly"-          "RPFT" "ry"-          "LRPFT" "ny"+                      :finals {"FS" "v"+                               "FS*" "vv"+                               "LFS" "lv"+                               "LFS*" "'ve"+                               "LRFS" "nv"+                               "RFS" "rv"+                               "KFS" "sh"+                               "LKFS" "lsh"+                               "LRKFS" "nsh"+                               "RKFS" "rsh"+                               "L" "l"+                               "LR" "rl"+                               "LR*" "rly"+                               "R" "r"+                               "P" "p"+                               "LP" "lp"+                               "LP*" "pl"+                               "LRP" "mp"+                               "LRP*" "mpl"+                               "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" -          "PKST" "ct"-          "LPKST" "lct"-          "LRPKST" "nct"-          "RPKST" "rct"+                               "KFST" "ty"+                               "LKFST" "lty"+                               "LKFST*" "y'd"+                               "LRKFST" "nty"+                               "RKFST" "rty"+                               "KFST*" "ght" -          "PKF" "d"-          "LPKF" "ld"-          "LRPKF" "nd"-          "RPKF" "rd"+                               "F" "f"+                               "F*" "ff"+                               "LF" "lf"+                               "LF*" "fl"+                               "LRF" "nf"+                               "LRF*" "fn" ;; :garfsmie:+                               "RF" "rf"+                               "PFT" "y"+                               "PFT*" "ption"+                               "LPFT" "ly"+                               "RPFT*" "rry" ; TODO this was wrong update it spooglypop+                               ; -tz+                               "LRPFT*" "nny"+                               "LPFT*" "lly"+                               "RPFT" "ry"+                               "LRPFT" "ny" -          "PKF*" "dd"-          "LPKF*" "ndl"-          "LRPKF*" "ddl"-          "RPKF*" "rld"+                               "PKST" "ct"+                               "LPKST" "lct"+                               "LRPKST" "nct"+                               "RPKST" "rct" -          "KS" "x"-          "RKS" "rx"-          "LKS" "lx"-          "LRKS" "nx"-          "KST" "xt"-          "RKST" "rxt"-          "LKST" "lxt"-          "LRKST" "nxt"-          "KF" "ch"-          "KF*" "q"-          "LKF" "lch"-          "LRKF" "nch"-          "LRKF*" "nsion"-          "RKF" "rch"-          "K" "k"-          "K*" "ck"-          "LK*" "lck"-          "LRK*" "nck"-          "RK*" "rck"-          "LK" "lk"-          "LRK" "nk"-          "RK" "rk"-          "S" "s"-          "LS" "ls"-          "LS*" "'s"-          "LRS" "ns"-          "RS" "rs"-          "PS" "m"-          "LPS" "lm"-          "LPS*" "'m"-          "LRPS" "mn"-          "LRPS*" "gm"-          "RPS" "rm"-          "PFS" "z"-          "PFS*" "zz"-          "LPFS" "lz"-          "LRPFS" "nz"-          "RPFS" "rz"-          "T" "t"-          "LT" "lt"-          "LRT" "nt"-          "LRT*" "n't"-          "RT" "rt"-          "RT*" "rnt"-          "ST" "st"-          "ST*" "ts"-          "LST" "lst"-          "LST*" "t's"-          "LRST" "nst"-          "RST" "rst"-          "PT" "pt"-          "LPT" "lpt"-          "LRPT" "mpt"-          "RPT" "rpt"+                               "PKF" "d"+                               "LPKF" "ld"+                               "LRPKF" "nd"+                               "RPKF" "rd" -          "PKST*" "kt"-          "LPKST*" "lkt"-          "LRPKST*" "nkt"-          "RPKST*" "rkt"+                               "PKF*" "dd"+                               "LPKF*" "ndl"+                               "LRPKF*" "ddl"+                               "RPKF*" "rld" -          "KT" "h"-          "KT*" "hh"-          "PKT*" "hp" ; :p-          "LPKT*" "'ll"-          "LRPKT*" "'d"-          "RPKT*" "'re"-          "PKT" "ph"-          "RPKT" "rph"-          "LRPKT" "mph" ; is nph a thing?-          "LPKT" "lph"-          "LKT" "hl"-          "LRKT" "hn"-          "RKT" "hr"-          "FT" "ft"-          "FT*" "tion"-          "LFT" "lft"-          "LFT*" "ltion"-          "LRFT" "nft"-          "LRFT*" "ntion"-          "RFT" "rft"-          "RFT*" "stion"-          "KFT" "tch"-          "KFT*" "ction"-          "LKFT" "ltch"-          "LKFT*" "sion"-          "LRKFT" "ntch"-          "LRKFT*" "nction"-          "RKFT" "rtch"-          "RKFT*" "stian"-          "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"+                               "KS" "x"+                               "RKS" "rx"+                               "LKS" "lx"+                               "LRKS" "nx"+                               "KST" "xt"+                               "RKST" "rxt"+                               "LKST" "lxt"+                               "LRKST" "nxt"+                               "KF" "ch"+                               "KF*" "q"+                               "LKF" "lch"+                               "LRKF" "nch"+                               "LRKF*" "nsion"+                               "RKF" "rch"+                               "K" "k"+                               "K*" "ck"+                               "LK*" "lck"+                               "LRK*" "nck"+                               "RK*" "rck"+                               "LK" "lk"+                               "LRK" "nk"+                               "RK" "rk"+                               "S" "s"+                               "LS" "ls"+                               "LS*" "'s"+                               "LRS" "ns"+                               "RS" "rs"+                               "PS" "m"+                               "LPS" "lm"+                               "LPS*" "'m"+                               "LRPS" "mn"+                               "LRPS*" "gm"+                               "RPS" "rm"+                               "PFS" "z"+                               "PFS*" "zz"+                               "LPFS" "lz"+                               "LRPFS" "nz"+                               "RPFS" "rz"+                               "T" "t"+                               "LT" "lt"+                               "LRT" "nt"+                               "LRT*" "n't"+                               "RT" "rt"+                               "RT*" "rnt"+                               "ST" "st"+                               "ST*" "ts"+                               "LST" "lst"+                               "LST*" "t's"+                               "LRST" "nst"+                               "RST" "rst"+                               "PT" "pt"+                               "LPT" "lpt"+                               "LRPT" "mpt"+                               "RPT" "rpt" -          "PKS*" "sc"-          "LPKS*" "lsc"-          "LRPKS*" "nsc"-          "RPKS*" "rsc"+                               "PKST*" "kt"+                               "LPKST*" "lkt"+                               "LRPKST*" "nkt"+                               "RPKST*" "rkt" -          "KST*" "j"-          "RKST*" "rj"-          "LKST*" "lj"-          "LRKST*" "nj"+                               "KT" "h"+                               "KT*" "hh"+                               "PKT*" "hp" ; :p+                               "LPKT*" "'ll"+                               "LRPKT*" "'d"+                               "RPKT*" "'re"+                               "PKT" "ph"+                               "RPKT" "rph"+                               "LRPKT" "mph" ; is nph a thing?+                               "LPKT" "lph"+                               "LKT" "hl"+                               "LRKT" "hn"+                               "RKT" "hr"+                               "FT" "ft"+                               "FT*" "tion"+                               "LFT" "lft"+                               "LFT*" "ltion"+                               "LRFT" "nft"+                               "LRFT*" "ntion"+                               "RFT" "rft"+                               "RFT*" "stion"+                               "KFT" "tch"+                               "KFT*" "ction"+                               "LKFT" "ltch"+                               "LKFT*" "sion"+                               "LRKFT" "ntch"+                               "LRKFT*" "nction"+                               "RKFT" "rtch"+                               "RKFT*" "stian"+                               "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" "c"-          "LPKS" "lc"-          "LRPKS" "nc"-          "RPKS" "rc"-          "S*" "ss"-          "PS*" "sp"-          "T*" "tt"-          "LT*" "ttl"+                               "PKS*" "sc"+                               "LPKS*" "lsc"+                               "LRPKS*" "nsc"+                               "RPKS*" "rsc" -          "FST" "th"-          "FST*" "fth"-          "LFST" "lth"-          "LFST*" "lfth"-          "LRFST" "nth"-          "LRFST*" "ndth"-          "RFST" "rth"-          "RFST*" "rmth"+                               "KST*" "j"+                               "RKST*" "rj"+                               "LKST*" "lj"+                               "LRKST*" "nj" -          "PKFST" "cy"-          "PKFST*" "sy"-          "LPKFST" "lcy"-          "LRPKFST" "ncy"-          "LRPKFST*" "ngth"-          "RPKFST" "rcy"}- :prefixes {"#" "{-|}"-            "+" "{^}"-            ; TODO this isn't even valid syntax so it's clearly not being used at all-            #_["#+" "{^-|}"]}- :suffixes {"e" "{^}e"-            "s" "{^}s"-            "es" "{^}es"}}+                               "PKS" "c"+                               "LPKS" "lc"+                               "LRPKS" "nc"+                               "RPKS" "rc"+                               "S*" "ss"+                               "PS*" "sp"+                               "T*" "tt"+                               "LT*" "ttl"++                               "FST" "th"+                               "FST*" "fth"+                               "LFST" "lth"+                               "LFST*" "lfth"+                               "LRFST" "nth"+                               "LRFST*" "ndth"+                               "RFST" "rth"+                               "RFST*" "rmth"++                               "PKFST" "cy"+                               "PKFST*" "sy"+                               "LPKFST" "lcy"+                               "LRPKFST" "ncy"+                               "LRPKFST*" "ngth"+                               "RPKFST" "rcy"}+                      :suffixes {"e" "{^}e"+                                 "s" "{^}s"+                                 "es" "{^}es"}}}

pinchord-javelin-dictionary-v30.0.yaml modified (view file)

@@ -390,6 +390,7 @@ - {stroke: IU, data: e, order: 3, avoidMask: AO^} - {stroke: -R, data: r, order: 4, avoidMask: -LPKFST*} - {stroke: WH, data: wh, order: 2, avoidMask: TSPR&}+- {stroke: '#+', data: '#+', order: 1, avoidMask: ''} - {stroke: W&, data: W&, order: 2, avoidMask: TSPHR} - {stroke: PR, data: pr, order: 2, avoidMask: TSWH&} - {stroke: SH, data: sh, order: 2, avoidMask: TPWR&}@@ -421,7 +422,9 @@ - {stroke: +, data: '{^}', order: 1, avoidMask: '#'} - {stroke: ^, data: y, order: 3, avoidMask: AOIU} - {stroke: '-', data: '', order: 4, avoidMask: -LRPKFST*}+- {stroke: '-', data: '', order: 5, avoidMask: es} - {stroke: O, data: o, order: 3, avoidMask: AIU^} - {stroke: A, data: a, order: 3, avoidMask: OIU^} - {stroke: '', data: '', order: 3, avoidMask: AOIU^} - {stroke: '', data: '{^}', order: 2, avoidMask: TSPWHR&}+- {stroke: '', data: '', order: 1, avoidMask: '#+'}

src/org/pinchord/generate.clj modified (view file)

@@ -37,24 +37,19 @@              rest-combos              (map #(str (first s) %) rest-combos)))))) -(defn abbreviate-long-chords [s]-  (update-vals s abbreviate))+(defn fill-gaps-in-banks [{:chords/keys [bank-chords bank-keys]}]+  (reduce (fn [acc [bank chords]]+            (let [default-chords (all-chords (bank-keys bank))]+              (assoc acc bank (-> (merge (zipmap default-chords default-chords) chords)+                                  (update-vals abbreviate)))))+          {} bank-chords)) -(defn with-gaps-filled [bank chords]-  (let [s (remove (bank chords) (all-chords (bank (:chords/bank-keys chords))))]-    (merge (bank chords) (abbreviate-long-chords (zipmap s s)))))--; TODO make this a function of bank-keys-(defn fill-gaps-in-banks [chords]-  (assoc chords-         :initials (with-gaps-filled :initials chords)-         :vowels   (with-gaps-filled :vowels chords)-         :finals   (with-gaps-filled :finals chords)))+(defn with-gaps-filled [chords]+  (assoc chords :chords/bank-chords (fill-gaps-in-banks chords)))  ; TODO switch to JVM and use keys! with the latest alpha-(defn build-javelin-dictionary [{:chords/keys [banks bank-keys]-                                 :keys [version]-                                 :as chords}]+(defn build-javelin-dictionary [{:chords/keys [banks bank-keys bank-chords]+                                 :keys [version]}]   (let [bank->priority (zipmap banks (map inc (range)))]     {:name (str "Pinchord Base " version)      :maximumOutlineLength 1@@ -71,14 +66,14 @@                                (into acc (mapv (fn [[stroke translation]]                                                  {:stroke stroke :data translation :order (bank->priority bank)})                                                entries))))-                           #{} (select-keys chords banks))+                           #{} bank-chords)                    (sort-by (comp - count :stroke)))}))  (defn -main [& _args]   (let [chords (-> (edn/read-string (slurp "chords.edn"))-                   fill-gaps-in-banks-                   (update :finals finalize)-                   (update :suffixes finalize))+                   with-gaps-filled+                   (update-in [:chords/bank-chords :finals] finalize)+                   (update-in [:chords/bank-chords :suffixes] finalize))         dict (build-javelin-dictionary chords)         dict-path (str "pinchord-javelin-dictionary-" (:version chords) ".yaml")]     (spit dict-path (yaml/generate-string dict))))