diff options
Diffstat (limited to 'keyboards/gboards')
57 files changed, 11774 insertions, 0 deletions
diff --git a/keyboards/gboards/combos/_generator/input.json b/keyboards/gboards/combos/_generator/input.json new file mode 100644 index 0000000000..022c4690e7 --- /dev/null +++ b/keyboards/gboards/combos/_generator/input.json @@ -0,0 +1,99 @@ +{ +"the ":"TH", +"of ":"OF", +"and ":"ND", +"to ":"TO", +"in ":"IN", +"for ":"FR", +"is ":"IS", +"on ":"ON", +"that ":"TA", +"by ":"BY", +"this ":"TS", +"with ":"WT", +"you ":"YU", +"it ":"IT", +"not ":"NT", +"or ":"OR", +"be ":"BE", +"are ":"AR", +"from ":"FE", +"at ":"AD", +"as ":"AS", +"your ":"UR", +"all ":"AL", +"have ":"HV", +"new ":"NU", +"more ":"MR", +"an ":"AN", +"was ":"WS", +"we ":"WI", +"will ":"WL", +"home ":"HM", +"can ":"CN", +"us ":"US", +"about ":"AB", +"if ":"IF", +"page ":"PG", +"my ":"MK", +"has ":"HS", +"search ":"SR", +"free ":"FH", +"but ":"BU", +"our ":"OU", +"one ":"WU", +"other ":"OH", +"do ":"DO", +"no ":"NK", +"information ":"IR", +"time ":"TM", +"they ":"TY", +"site ":"SY", +"he ":"HE", +"up ":"UP", +"may ":"MA", +"what ":"WA", +"which ":"WH", +"their ":"TR", +"news ":"NS", +"out ":"OG", +"use ":"UE", +"any ":"NE", +"there ":"TE", +"see ":"SE", +"only ":"LY", +"so ":"SO", +"his ":"HI", +"when ":"WN", +"contact ":"KT", +"here ":"HR", +"business ":"BS", +"who ":"WO", +"web ":"WB", +"also ":"LS", +"now ":"NQ", +"help ":"HL", +"get ":"GT", +"view ":"VU", +"online ":"LN", +"first ":"FS", +"been ":"BN", +"would ":"WD", +"how ":"HU", +"were ":"WR", +"me ":"ME", +"some ":"SM", +"these ":"TZ", +"click ":"CL", +"its ":"IZ", +"like ":"LK", +"service ":"SV", +"than ":"HN", +"find ":"FN", +"price ":"PR", +"date ":"DT", +"back ":"BK", +"top ":"TP", +"people ":"PE", +"had ":"HD" +} diff --git a/keyboards/gboards/combos/_generator/main.go b/keyboards/gboards/combos/_generator/main.go new file mode 100644 index 0000000000..043c8b78c7 --- /dev/null +++ b/keyboards/gboards/combos/_generator/main.go @@ -0,0 +1,60 @@ +// Package for taking a mapping of words to keys and outputing a +// combo engine commpatible def + +package main + +import ( + "io/ioutil" + "fmt" + "encoding/json" + "os" + "sort" + "strings" + "hash/crc64" + //"encoding/base64" +) + +func main() { + // Show Usage + if len(os.Args) < 3 { + fmt.Println("Usage: ./keymap-gen inputfile outfile") + fmt.Println("Outputs dict in current dir") + return + } + + // Read the source + data, err := ioutil.ReadFile(os.Args[1]) + if err != nil { + panic(err) + } + + // Unbundle Data + var FullDict map[string]string + var output []string + json.Unmarshal(data, &FullDict) + + // Loop over entries and store + for i,v := range FullDict { + // This checks for colllisions, Generates hash + hash := crc64.Checksum([]byte(v), crc64.MakeTable(crc64.ECMA)) + hashStr := fmt.Sprintf("txt_%x", hash)[:10] + + // Format keys into combo + var keys string + for _, k := range(v) { + keys += fmt.Sprintf("KC_%v, ", string(k)) + + } + keys = keys[:len(keys)-2] + + // Append to output + spacer := strings.Repeat(" ", 15-len(i)) + output = append(output, fmt.Sprintf("SUBS(%v, %v\"%v\", %v)\n", hashStr, spacer, i, keys)) + } + + + sort.Slice(output, func (i,j int) bool { + return strings.Count(output[i], " ") > strings.Count(output[j], " ") + }) + ioutil.WriteFile(os.Args[2], []byte(strings.Join(output, "")), 0555) +} diff --git a/keyboards/gboards/combos/eng-combos.def b/keyboards/gboards/combos/eng-combos.def new file mode 100644 index 0000000000..6f4a8a91e6 --- /dev/null +++ b/keyboards/gboards/combos/eng-combos.def @@ -0,0 +1,97 @@ +SUBS(txt_eaff0b, "me ", KC_M, KC_E) +SUBS(txt_c96f2b, "as ", KC_A, KC_S) +SUBS(txt_ff3afa, "we ", KC_W, KC_I) +SUBS(txt_d94d16, "is ", KC_I, KC_S) +SUBS(txt_7f6b3b, "he ", KC_H, KC_E) +SUBS(txt_377110, "by ", KC_B, KC_Y) +SUBS(txt_8d5585, "to ", KC_T, KC_O) +SUBS(txt_888e33, "at ", KC_A, KC_D) +SUBS(txt_ad11fe, "do ", KC_D, KC_O) +SUBS(txt_285619, "us ", KC_U, KC_S) +SUBS(txt_e537af, "it ", KC_I, KC_T) +SUBS(txt_9b89bf, "in ", KC_I, KC_N) +SUBS(txt_b11346, "so ", KC_S, KC_O) +SUBS(txt_8bab82, "an ", KC_A, KC_N) +SUBS(txt_6f31f3, "no ", KC_N, KC_K) +SUBS(txt_f32605, "on ", KC_O, KC_N) +SUBS(txt_2cce07, "or ", KC_O, KC_R) +SUBS(txt_48782c, "of ", KC_O, KC_F) +SUBS(txt_c69bf5, "be ", KC_B, KC_E) +SUBS(txt_6c2838, "if ", KC_I, KC_F) +SUBS(txt_6ffc63, "up ", KC_U, KC_P) +SUBS(txt_920a79, "my ", KC_M, KC_K) +SUBS(txt_f31a7f, "his ", KC_H, KC_I) +SUBS(txt_da994d, "use ", KC_U, KC_E) +SUBS(txt_b12f3c, "the ", KC_T, KC_H) +SUBS(txt_4607a4, "for ", KC_F, KC_R) +SUBS(txt_a4eacd, "and ", KC_N, KC_D) +SUBS(txt_6a5f20, "new ", KC_N, KC_U) +SUBS(txt_bb0054, "but ", KC_B, KC_U) +SUBS(txt_7a4167, "are ", KC_A, KC_R) +SUBS(txt_765d98, "you ", KC_Y, KC_U) +SUBS(txt_ed01f2, "one ", KC_W, KC_U) +SUBS(txt_b236f7, "see ", KC_S, KC_E) +SUBS(txt_3eb659, "our ", KC_O, KC_U) +SUBS(txt_2f09ac, "how ", KC_H, KC_U) +SUBS(txt_706e0f, "who ", KC_W, KC_O) +SUBS(txt_9dba28, "get ", KC_G, KC_T) +SUBS(txt_3b151a, "top ", KC_T, KC_P) +SUBS(txt_17c481, "any ", KC_N, KC_E) +SUBS(txt_227971, "can ", KC_C, KC_N) +SUBS(txt_4f3107, "web ", KC_W, KC_B) +SUBS(txt_7f2fb4, "all ", KC_A, KC_L) +SUBS(txt_8184ea, "was ", KC_W, KC_S) +SUBS(txt_8da46f, "has ", KC_H, KC_S) +SUBS(txt_cc4577, "had ", KC_H, KC_D) +SUBS(txt_b7a9ce, "out ", KC_O, KC_G) +SUBS(txt_9dc2dd, "its ", KC_I, KC_Z) +SUBS(txt_d9716c, "not ", KC_N, KC_T) +SUBS(txt_118fe3, "now ", KC_N, KC_Q) +SUBS(txt_912fc8, "may ", KC_M, KC_A) +SUBS(txt_769008, "been ", KC_B, KC_N) +SUBS(txt_43dc12, "site ", KC_S, KC_Y) +SUBS(txt_c6e300, "like ", KC_L, KC_K) +SUBS(txt_bdfe53, "with ", KC_W, KC_T) +SUBS(txt_c34043, "when ", KC_W, KC_N) +SUBS(txt_b7ed41, "find ", KC_F, KC_N) +SUBS(txt_f5a0f7, "that ", KC_T, KC_A) +SUBS(txt_3be4f0, "help ", KC_H, KC_L) +SUBS(txt_32aaa6, "were ", KC_W, KC_R) +SUBS(txt_4cd926, "also ", KC_L, KC_S) +SUBS(txt_be6e87, "back ", KC_B, KC_K) +SUBS(txt_5a3966, "view ", KC_V, KC_U) +SUBS(txt_89b7d9, "what ", KC_W, KC_A) +SUBS(txt_4ffc97, "only ", KC_L, KC_Y) +SUBS(txt_e50bd5, "news ", KC_N, KC_S) +SUBS(txt_7cbf60, "this ", KC_T, KC_S) +SUBS(txt_ab1e13, "more ", KC_M, KC_R) +SUBS(txt_459770, "some ", KC_S, KC_M) +SUBS(txt_37c475, "will ", KC_W, KC_L) +SUBS(txt_88cabc, "home ", KC_H, KC_M) +SUBS(txt_38b9b4, "free ", KC_F, KC_H) +SUBS(txt_7f9ad1, "they ", KC_T, KC_Y) +SUBS(txt_79d1b3, "time ", KC_T, KC_M) +SUBS(txt_6081a2, "date ", KC_D, KC_T) +SUBS(txt_bb894b, "page ", KC_P, KC_G) +SUBS(txt_455ae0, "have ", KC_H, KC_V) +SUBS(txt_cf60c6, "than ", KC_H, KC_N) +SUBS(txt_3e8a23, "here ", KC_H, KC_R) +SUBS(txt_9b7855, "your ", KC_U, KC_R) +SUBS(txt_7e6bc5, "from ", KC_F, KC_E) +SUBS(txt_d6fd47, "click ", KC_C, KC_L) +SUBS(txt_7c72f0, "other ", KC_O, KC_H) +SUBS(txt_f529e8, "first ", KC_F, KC_S) +SUBS(txt_c065f2, "would ", KC_W, KC_D) +SUBS(txt_3830ab, "these ", KC_T, KC_Z) +SUBS(txt_cf912c, "their ", KC_T, KC_R) +SUBS(txt_4c14b6, "which ", KC_W, KC_H) +SUBS(txt_eec659, "price ", KC_P, KC_R) +SUBS(txt_7dac6e, "about ", KC_A, KC_B) +SUBS(txt_8e7034, "there ", KC_T, KC_E) +SUBS(txt_e1d8f7, "online ", KC_L, KC_N) +SUBS(txt_4f0d7d, "people ", KC_P, KC_E) +SUBS(txt_f3d7ef, "search ", KC_S, KC_R) +SUBS(txt_4ce55c, "contact ", KC_K, KC_T) +SUBS(txt_88072c, "service ", KC_S, KC_V) +SUBS(txt_3454a1, "business ", KC_B, KC_S) +SUBS(txt_6a635a, "information ", KC_I, KC_R) diff --git a/keyboards/gboards/combos/germ-mouse-keys.def b/keyboards/gboards/combos/germ-mouse-keys.def new file mode 100644 index 0000000000..c0aff412e5 --- /dev/null +++ b/keyboards/gboards/combos/germ-mouse-keys.def @@ -0,0 +1,2 @@ +COMB(gbClick, KC_BTN1, KC_G, KC_B) +COMB(fvClick, KC_BTN2, KC_F, KC_V) diff --git a/keyboards/gboards/combos/germ-vim-helpers.def b/keyboards/gboards/combos/germ-vim-helpers.def new file mode 100644 index 0000000000..3e2b45db16 --- /dev/null +++ b/keyboards/gboards/combos/germ-vim-helpers.def @@ -0,0 +1,10 @@ +// Vim-Mode combos + +COMB(weEsc, KC_ESC, KC_W, KC_E) +COMB(sdBspc, KC_BSPC, KC_S, KC_D) +COMB(dfTab, KC_TAB, KC_D, KC_F) +COMB(cvEnt, KC_ENT, KC_C, KC_V) +COMB(uiEsc, KC_ESC, KC_U, KC_I) +COMB(jkCol, KC_COLN, KC_J, KC_K) +COMB(hnEnt, KC_ENT, KC_H, KC_N) + diff --git a/keyboards/gboards/combos/readme.md b/keyboards/gboards/combos/readme.md new file mode 100644 index 0000000000..ca4b169c1d --- /dev/null +++ b/keyboards/gboards/combos/readme.md @@ -0,0 +1,7 @@ +# Combo library! + +This is a list of all the currently available dictionaries that are available for inclusion. +Please submit a PR with yours! If you have a bunch prepend your username to the front. i.e. +`germ-vim-helpers` + +Thanks! diff --git a/keyboards/gboards/dicts/aset/_generator/main.go b/keyboards/gboards/dicts/aset/_generator/main.go new file mode 100644 index 0000000000..ae7e15c8be --- /dev/null +++ b/keyboards/gboards/dicts/aset/_generator/main.go @@ -0,0 +1,298 @@ +package main + +import ( + "io/ioutil" + "fmt" + "encoding/json" + "os" + "path/filepath" + "strings" + "sort" + "hash/crc64" + //"encoding/base64" +) + +func main() { + // Show Usage + if len(os.Args) < 3 { + fmt.Println("Usage: ./keymap-gen src-dir out-dir") + fmt.Println("Outputs c files in out-dir") + fmt.Println("Make sure the dirs exist.") + return + } + + files, err := filepath.Glob(os.Args[1] + "/*.json") + if err != nil { + fmt.Printf("Could not open src-dir: %v\n", err) + return + } + + for _, fname := range(files) { + fmt.Println("Processing: ", fname) + // Read the source + data, err := ioutil.ReadFile(fname) + if err != nil { + panic(err) + } + + // Unbundle Data + var FullDict map[string]Entry + json.Unmarshal(data, &FullDict) + + // Loop over entries and store + var output []string + for i,v := range FullDict { + if i == "0" { + continue + } + + // Special handling for numbermap + var entry string + if strings.Contains(fname, "num") { + entry = v.toKeymap("NUM|") + } else { + entry = v.toKeymap("") + } + + if entry != "" { + output = append(output, entry) + } + } + + // Sort by length, then amount of whitespace lol + sort.Slice(output, func (i,j int) bool { + var maxLen int + if len(output[i]) > len(output[j]) { + maxLen = len(output[i]) + } else { + maxLen = len(output[j]) + } + + return maxLen-strings.Count(output[i][:40], " ") < maxLen-strings.Count(output[j][:40], " ") + }) + + // Whack a disclaimer + output = append([]string{"// This file is automatically generated. Do not edit it!\n\n"}, output...) + + // Write all data out + outName := filepath.Base(fname) + outName = os.Args[2] + outName[:len(outName)-5]+".def" + fmt.Println("Saving: ", outName) + ioutil.WriteFile(outName, []byte(strings.Join(output, "")), 0755) + } +} + +func (e Entry) toKeymap(prefix string) (string) { + // storage for parts + var command, chord, arg string + wordInfo := parseWords(e) + + // Handle prefix + if prefix != "" { + chord = prefix + } + + // Format the chord + keys := []string{"AA", "AS", "AE", "AT", "AN", "AI", "AO", "AP"} + for i, v := range e.Input { + chord += keys[v-1] + + if i != len(e.Input)-1 { + chord += "|" + } + } + + // Handle specials/base first + var ok bool + var v []string + + if e.Special != "" { + v, ok = QMKLookup[e.Special] + } + if !ok && e.Base != "" { + v, ok = QMKLookup[e.Base] + } + + if ok { + // Determine way to send key + if len(v) == 1 { + command = "PRES(" + } else { + command = "KEYS(" + } + } + + if ok { + if len(v) > 1 { + arg += "{" + } + + // String together args + for ii, vv := range(v) { + arg += vv + if ii == len(v)-1 && len(v) > 1 { + arg += ", COMBO_END}" + } else if ii != len(v)-1 { + arg += ", " + } + } + + + hash := crc64.Checksum([]byte(fmt.Sprintf("%v%v", arg, chord)), crc64.MakeTable(crc64.ECMA)) + hashStr := fmt.Sprintf("cmb_%x", hash) + wordSpacer := strings.Repeat(" ", 42-len(arg)) + if command == "KEYS(" { + arg = fmt.Sprintf("%v, %v %v", hashStr, wordSpacer, arg) + } else { + arg = fmt.Sprintf("%65v", arg) + } + + goto Found + } + + // Parse out word info + if wordInfo.LRank == 0 && wordInfo.RRank == 0 { + goto Blank + } + + if wordInfo.LRank != 0 || wordInfo.RRank != 0 { + if wordInfo.LRank != 0 && wordInfo.RRank != 0 { + // Just blank the structure and recall + left, right := e, e + left.Trw = nil + right.Tlw = nil + return fmt.Sprintf("%v%v", left.toKeymap("LFT|"), right.toKeymap("RGT|")) + } + + var word string + if wordInfo.LRank > wordInfo.RRank { + word = wordInfo.LWord + } else { + word = wordInfo.RWord + } + + // Add in thumb + chord = "AR|" + chord + + + // generate function name + hash := crc64.Checksum([]byte(word), crc64.MakeTable(crc64.ECMA)) + hashStr := fmt.Sprintf("str_%016X", hash) + command = "SUBS(" + wordSpacer := strings.Repeat(" ", 40-len(word)) + arg = fmt.Sprintf("%v, %v \"%v \"", hashStr, wordSpacer, word) + goto Found + } + + panic(e.String()) + + Found: + chord += "," + return fmt.Sprintf("%v%-35v%v)\n", command, chord, arg) + + Blank: + return "" +} + +type Entry struct { + Input []int + Base string + Tlw []interface{} + Trw []interface{} + Special string +} +type Word struct { + LWord string + LRank float64 + RWord string + RRank float64 +} + +func parseWords(e Entry) (ret Word) { + if len(e.Tlw) > 0 { + ret.LWord = e.Tlw[0].(string) + ret.LRank= e.Tlw[1].(float64) + } + if len(e.Trw) > 0 { + ret.RWord = e.Trw[0].(string) + ret.RRank= e.Trw[1].(float64) + } + return ret +} +func (e Entry) String() (ret string) { + ret = fmt.Sprintln("Input: ", e.Input) + ret += fmt.Sprintln("Base: ", e.Base) + ret += fmt.Sprintln("Left: ", e.Tlw) + ret += fmt.Sprintln("Right: ", e.Trw) + ret += fmt.Sprintln("Special: ", e.Special) + + return ret +} + +var QMKLookup = map[string][]string { +"!":[]string{"KC_LSFT", "KC_1"}, +"'":[]string{"KC_QUOT"}, +"(":[]string{"KC_LSFT", "KC_9"}, +")":[]string{"KC_LSFT", "KC_0"}, +",":[]string{"KC_COMM"}, +"-":[]string{"KC_MINS"}, +".":[]string{"KC_DOT"}, +";":[]string{"KC_SCLN"}, +"?":[]string{"KC_QUOT"}, +"a":[]string{"KC_A"}, +"b":[]string{"KC_B"}, +"c":[]string{"KC_C"}, +"d":[]string{"KC_D"}, +"e":[]string{"KC_E"}, +"f":[]string{"KC_F"}, +"g":[]string{"KC_G"}, +"h":[]string{"KC_H"}, +"i":[]string{"KC_I"}, +"j":[]string{"KC_J"}, +"k":[]string{"KC_K"}, +"l":[]string{"KC_L"}, +"m":[]string{"KC_M"}, +"n":[]string{"KC_N"}, +"o":[]string{"KC_O"}, +"p":[]string{"KC_P"}, +"q":[]string{"KC_Q"}, +"r":[]string{"KC_R"}, +"s":[]string{"KC_S"}, +"t":[]string{"KC_T"}, +"u":[]string{"KC_U"}, +"v":[]string{"KC_V"}, +"w":[]string{"KC_W"}, +"x":[]string{"KC_X"}, +"y":[]string{"KC_Y"}, +"z":[]string{"KC_Z"}, + +//specials +"bksp":[]string{"KC_BSPC"}, +"enter":[]string{"KC_ENT"}, +//"numsym":[]string{"NUM)"}, //TODO: Sticky +//"LETTERS":[]string{"KC_SPC"}, + +//symbols +"[":[]string{"KC_LBRC"}, +"]":[]string{"KC_RBRC"}, +" ":[]string{"KC_SPC"}, +"1":[]string{"KC_1"}, +"2":[]string{"KC_2"}, +"3":[]string{"KC_3"}, +"4":[]string{"KC_4"}, +"5":[]string{"KC_5"}, +"6":[]string{"KC_6"}, +"7":[]string{"KC_7"}, +"8":[]string{"KC_8"}, +"9":[]string{"KC_9"}, +"0":[]string{"KC_0"}, +"=":[]string{"KC_EQL"}, +"Fn":[]string{"KC_NO"}, +"SPACE":[]string{"KC_SPC"}, +"Home":[]string{"KC_HOME"}, +"End":[]string{"KC_END"}, +" ":[]string{"KC_TAB"}, +" ":[]string{"KC_TAB"}, +"\t":[]string{"KC_TAB"}, +"`":[]string{"KC_GRV"}, +} diff --git a/keyboards/gboards/dicts/aset/_generator/src/da-keymap.json b/keyboards/gboards/dicts/aset/_generator/src/da-keymap.json new file mode 100644 index 0000000000..5bc62f4bca --- /dev/null +++ b/keyboards/gboards/dicts/aset/_generator/src/da-keymap.json @@ -0,0 +1 @@ +{"0":{"value":0,"notes":["Developer : Zack Dennis (zack@asetniop.com)","Date : 12/12/2014","All code (c) 2014 Pointesa, LLC all rights reserved","Abbreviations : ","tlp = top left partial","lp = left partials","trp = top right partial","rp = right partials","tlw = top left word","lw = left words","trw = top right word","rw = right words"]},"1":{"input":[1],"base":"a","baseshift":"A","tlp":["aa",70938],"tlw":["a",1885],"lp":["aa"],"rp":[]},"2":{"input":[2],"base":"s","baseshift":"S","tlp":["ss",6312],"tlw":["s",729],"lp":["ss"],"rp":[]},"3":{"input":[1,2],"base":"w","baseshift":"W","tlp":["sa",51462],"tlw":["saa",14038],"lp":["sa","saa","as","ass","wa","aas","ssa","sas","ww","aw","saas","www","assa","ssaa","ws"],"rp":[]},"4":{"input":[3],"base":"e","baseshift":"E","tlp":["ee",2647],"tlw":["e",88],"lp":["ee"],"rp":[]},"5":{"input":[1,3],"base":"x","baseshift":"X","tlp":["ae",65201],"tlw":["ae",1518],"lp":["ae","aae","ex","ea","ax","aee","xe","xa","exa","exe","axe","aex","eae"],"rp":[]},"6":{"input":[2,3],"base":"d","baseshift":"D","tlp":["de",283077],"tlw":["de",23660],"lp":["de","ed","es","se","ede","ds","des","sse","dd","dse","ess","dde","eds","edes","ese","sed","ded","see","dede","sede"],"rp":[]},"7":{"input":[1,2,3],"tlp":["ad",24996],"tlw":["da",8071],"lp":["ad","da","ade","aes","aad","sae","aed","ada","sad","aede","aade","saad","aada","ads","asse","aese","dae","dda","esa","we"],"rp":[]},"8":{"input":[4],"base":"t","baseshift":"T","tlp":["tt",16147],"tlw":["t",62],"lp":["tt"],"rp":[]},"9":{"input":[1,4],"base":"f","baseshift":"F","tlp":["at",52505],"tlw":["at",39486],"lp":["at","ta","af","fa","ft","att","taa","faa","aft","aat","ff","aatt","fat","fatt","aff","tat","tf","ata","fta","afta"],"rp":[]},"10":{"input":[2,4],"base":"c","baseshift":"C","tlp":["st",66160],"tlw":["c",179],"lp":["st","ts","sc","sst","ct","cc","tc","cs","cst","tst","tsc","tts","sts"],"rp":[]},"11":{"input":[1,2,4],"tlp":["sta",9134],"tlw":["fast",485],"lp":["sta","ast","sat","staa","ca","satt","tsa","fas","fast","fs","afs","ac","asta","sf","tas","tsaa","fst","afst","stat","tsat"],"rp":[]},"12":{"input":[3,4],"base":"r","baseshift":"R","tlp":["er",200106],"tlw":["er",24396],"lp":["er","et","te","re","ere","rt","ter","tr","tte","ret","ett","ette","rte","ert","rr","tet","tter","rer","rre","eret"],"rp":[]},"13":{"input":[1,3,4],"tlp":["ar",71256],"tlw":["fra",7354],"lp":["ar","ra","aer","fr","aar","aere","fte","fra","ef","tra","rae","are","fter","tae","eft","atte","efte","aet","fre","rf"],"rp":[]},"14":{"input":[2,3,4],"tlp":["det",50507],"tlw":["det",40064],"lp":["det","der","dt","ste","rd","dr","rs","est","dre","red","res","este","rde","ted","dere","rst","dte","rede","dst","str"],"rp":[]},"15":{"input":[1,2,3,4],"tlp":["aest",3267],"tlw":["satte",874],"lp":["aest","stra","stae","ader","ard","aerd","ared","rsta","saet","rda","derf","aard","fes","tad","stad","raad","dra","fred","fess","raed"],"rp":[]},"16":{"input":[5],"base":"n","baseshift":"N","trp":["nn",12763],"trw":["n",53],"lp":[],"rp":["nn"]},"17":{"input":[1,5],"base":"q","baseshift":"Q","tlp":["an",107331],"trp":["na",18738],"tlw":["an",271],"trw":["naa",705],"lp":["an","aan","ann","anna","ana"],"rp":["na","naa","nan","nna","naan"]},"18":{"input":[2,5],"base":"j","baseshift":"J","tlp":["sn",2823],"trp":[ |