diff options
Diffstat (limited to 'asciifarmclient/loaders.py')
| -rw-r--r-- | asciifarmclient/loaders.py | 81 |
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 + } |
