summaryrefslogtreecommitdiff
path: root/asciifarmclient/loaders.py
diff options
context:
space:
mode:
Diffstat (limited to 'asciifarmclient/loaders.py')
-rw-r--r--asciifarmclient/loaders.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/asciifarmclient/loaders.py b/asciifarmclient/loaders.py
new file mode 100644
index 0000000..efdd1c0
--- /dev/null
+++ b/asciifarmclient/loaders.py
@@ -0,0 +1,81 @@
+
+import os
+
+from .paths import keybindingsPath, charmapPath
+import json
+
+
+standardKeyFiles = {
+ "default": os.path.join(keybindingsPath, "default.json"),
+ "azerty": os.path.join(keybindingsPath, "azerty.json")
+}
+
+def loadKeybindings(name):
+ fname = None
+ if name in standardKeyFiles:
+ fname = standardKeyFiles[name]
+ else:
+ fname = name
+ with open(fname) as f:
+ data = json.load(f)
+ bindings = {}
+ help = ""
+ for ftemplate in data.get("templates", []):
+ if ftemplate.partition(os.sep)[0] in {".", ".."}:
+ ftemplate = os.path.relpath(ftemplate, fname)
+ template = loadKeybindings(ftemplate)
+ bindings.update(template.get("actions", {}))
+ help = template.get("help", help)
+ bindings.update(data.get("actions", {}))
+ help = data.get("help", help)
+ return {"actions": bindings, "help": help}
+
+
+standardCharFiles = {name: os.path.join(charmapPath, file) for name, file in {
+ "default": "fullwidth.json",
+ "halfwidth": "halfwidth.json",
+ "hw": "halfwidth.json",
+ "fullwidth": "fullwidth.json",
+ "fw": "fullwidth.json",
+ "emoji": "emoji.json"
+}.items()}
+
+def loadCharmap(name):
+ fname = None
+ if name in standardCharFiles:
+ fname = standardCharFiles[name]
+ else:
+ fname = name
+ with open(fname) as f:
+ data = json.load(f)
+
+ templates = []
+ for ftemplate in data.get("templates", []):
+ if ftemplate.partition(os.sep)[0] in {".", ".."}:
+ ftemplate = os.path.relpath(ftemplate, fname)
+ templates.append(loadCharmap(ftemplate))
+
+ templates.append(data)
+
+ mapping = {}
+ writable = {}
+ default = None
+ charwidth = 1
+ alphabet = ""
+ msgcolours = {}
+
+ for template in templates:
+ mapping.update(template.get("mapping", {}))
+ writable.update(template.get("writable", {}))
+ default = template.get("default", default)
+ charwidth = template.get("charwidth", charwidth)
+ alphabet = template.get("alphabet", alphabet)
+ msgcolours.update(template.get("msgcolours", {}))
+ return {
+ "mapping": mapping,
+ "writable": writable,
+ "default": default,
+ "charwidth": charwidth,
+ "alphabet": alphabet,
+ "msgcolours": msgcolours
+ }