summaryrefslogtreecommitdiff
path: root/keyboards/ferris/keymaps/json2crab.py
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/ferris/keymaps/json2crab.py')
-rwxr-xr-xkeyboards/ferris/keymaps/json2crab.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/keyboards/ferris/keymaps/json2crab.py b/keyboards/ferris/keymaps/json2crab.py
new file mode 100755
index 0000000000..a32429fae5
--- /dev/null
+++ b/keyboards/ferris/keymaps/json2crab.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+
+import argparse
+import sys
+import json
+
+indent_level=4
+
+def parse_cli():
+ parser = argparse.ArgumentParser(description='Ferris keymap formatter')
+ parser.add_argument("--input", type=argparse.FileType('r'),
+ default=sys.stdin, help="Input keymap (json file produced by qmk configurator)")
+ return parser.parse_args()
+
+def col_index(key_index):
+ if key_index < 30:
+ col = key_index % 5
+ else:
+ col = key_index % 2
+ return col
+
+def format_layers(layers):
+ formatted = indent_level * " " + "\"layers\": [\n"
+ max_key_length = {}
+ for layer in layers:
+ for (index, keycode) in enumerate(layer):
+ col = col_index(index)
+ max_length = max_key_length.get(col)
+ if (not max_length) or len(keycode) > max_length:
+ max_key_length.update({col: len(keycode)})
+ for (layer_index, layer) in enumerate(layers):
+ formatted += 2 * indent_level * " "
+ formatted += "["
+ for (index, keycode) in enumerate(layer):
+ if index > 30 and index % 2 == 0 or index % 5 == 0 and index != 0:
+ formatted += (1 + 2 * indent_level) * " "
+ formatted += json.dumps(keycode)
+ if index == 33:
+ formatted += "\n"
+ elif index > 30 and index % 2 == 1 or index % 5 == 4:
+ formatted += ",\n"
+ else:
+ n_spaces = max_key_length[col_index(index)] - len(keycode)
+ formatted += n_spaces * " "
+ formatted += ", "
+ if index % 10 == 9:
+ formatted += "\n"
+ formatted += 2 * indent_level * " "
+ if layer_index < len(layers) - 1:
+ formatted += "],\n"
+ else:
+ formatted += "]\n"
+ formatted += indent_level * " "
+ formatted += "]"
+
+ return formatted
+
+def format_keymap(keymap_json):
+ formatted = "{"
+ for (index, k) in enumerate(keymap_json):
+ if k == "layers":
+ formatted += format_layers(keymap_json[k])
+ else:
+ formatted += f"{indent_level * ' '}{json.dumps(k)}: {json.dumps(keymap_json[k])}"
+ if index < len(keymap_json) - 1:
+ formatted += ","
+ formatted += "\n"
+ formatted += "}"
+ return formatted
+
+def main():
+ args=parse_cli()
+ keymap_json = json.loads(args.input.read())
+ print(format_keymap(keymap_json))
+
+main()