forked from mfulz_github/qmk_firmware
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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)
 | |
| }
 | 
