summaryrefslogtreecommitdiffstats
path: root/keyboards/gboards
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/gboards')
-rw-r--r--keyboards/gboards/combos/_generator/input.json99
-rw-r--r--keyboards/gboards/combos/_generator/main.go60
-rw-r--r--keyboards/gboards/combos/eng-combos.def97
-rw-r--r--keyboards/gboards/combos/germ-mouse-keys.def2
-rw-r--r--keyboards/gboards/combos/germ-vim-helpers.def10
-rw-r--r--keyboards/gboards/combos/readme.md7
-rw-r--r--keyboards/gboards/dicts/aset/_generator/main.go298
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/da-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/de-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/en-colemak-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/en-dvorak-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/en-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/es-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/fn-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/fr-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/hu-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/it-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/nl-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/num-keymap.json2830
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/nw-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/pl-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/pt-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/ro-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/sv-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/_generator/src/tr-keymap.json1
-rw-r--r--keyboards/gboards/dicts/aset/cmd-keymap.def28
-rw-r--r--keyboards/gboards/dicts/aset/da-keymap.def386
-rw-r--r--keyboards/gboards/dicts/aset/de-keymap.def373
-rw-r--r--keyboards/gboards/dicts/aset/en-colemak-keymap.def394
-rw-r--r--keyboards/gboards/dicts/aset/en-dvorak-keymap.def420
-rw-r--r--keyboards/gboards/dicts/aset/en-keymap.def403
-rw-r--r--keyboards/gboards/dicts/aset/es-keymap.def389
-rw-r--r--keyboards/gboards/dicts/aset/fn-keymap.def374
-rw-r--r--keyboards/gboards/dicts/aset/fr-keymap.def391
-rw-r--r--keyboards/gboards/dicts/aset/hu-keymap.def395
-rw-r--r--keyboards/gboards/dicts/aset/it-keymap.def399
-rw-r--r--keyboards/gboards/dicts/aset/layer-keymap.def22
-rw-r--r--keyboards/gboards/dicts/aset/nl-keymap.def396
-rw-r--r--keyboards/gboards/dicts/aset/num-keymap.def36
-rw-r--r--keyboards/gboards/dicts/aset/nw-keymap.def381
-rw-r--r--keyboards/gboards/dicts/aset/pl-keymap.def391
-rw-r--r--keyboards/gboards/dicts/aset/pt-keymap.def398
-rw-r--r--keyboards/gboards/dicts/aset/ro-keymap.def409
-rw-r--r--keyboards/gboards/dicts/aset/sv-keymap.def403
-rw-r--r--keyboards/gboards/dicts/aset/tr-keymap.def387
-rw-r--r--keyboards/gboards/engine/config.h0
-rw-r--r--keyboards/gboards/engine/engine.c458
-rw-r--r--keyboards/gboards/engine/engine.h104
-rw-r--r--keyboards/gboards/engine/keymap_engine.h121
-rw-r--r--keyboards/gboards/engine/rules.mk1
-rw-r--r--keyboards/gboards/g/config_default.h90
-rw-r--r--keyboards/gboards/g/engine.c470
-rw-r--r--keyboards/gboards/g/engine.h117
-rw-r--r--keyboards/gboards/g/keymap_combo.h56
-rw-r--r--keyboards/gboards/g/keymap_engine.h122
-rw-r--r--keyboards/gboards/g/rules.mk1
-rw-r--r--keyboards/gboards/readme.md39
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":[