summaryrefslogtreecommitdiff
path: root/asciifarmclient/charmap.py
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-09-22 13:13:29 +0200
committertroido <troido@protonmail.com>2020-09-22 13:13:29 +0200
commit2397f225381bafeb87262fef4979ee9eae516717 (patch)
tree6bb145eb660d2c565963e0986a2237a5444d7aaf /asciifarmclient/charmap.py
parent17d15e0525046399884db0a3fae64ed0dbce3cd6 (diff)
refactored CharMap out of Display
Diffstat (limited to 'asciifarmclient/charmap.py')
-rw-r--r--asciifarmclient/charmap.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/asciifarmclient/charmap.py b/asciifarmclient/charmap.py
new file mode 100644
index 0000000..43ae006
--- /dev/null
+++ b/asciifarmclient/charmap.py
@@ -0,0 +1,50 @@
+
+
+from .utils import get
+from ratuil.textstyle import TextStyle
+
+ALPHABET = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
+
+def parseSprite(sprite):
+ if isinstance(sprite, str):
+ return (sprite, None, None)
+ char = get(sprite, 0, " ")
+ fg = get(sprite, 1)
+ bg = get(sprite, 2)
+ return (char, fg, bg)
+
+class CharMap:
+
+ def __init__(self):
+ self.mapping = {}
+ self.default = ("?", None, None)
+ self.message_styles = {}
+ self.default_message_style = TextStyle()
+ self.character_width = 1
+ self.alphabet = ALPHABET
+
+ def get(self, spritename):
+ return self.mapping.get(spritename, self.default)
+
+ def get_message_style(self, msgtype):
+ return self.message_styles.get(msgtype, self.default_message_style)
+
+ def apply_json(self, jsonmap):
+ for name, sprite in jsonmap.get("mapping", {}).items():
+ vals = parseSprite(sprite)
+ self.mapping[name] = vals
+
+ self.alphabet = jsonmap.get("alphabet", self.alphabet)
+
+ for name, colours in jsonmap.get("writable", {}).items():
+ fg = get(colours, 0)
+ bg = get(colours, 1)
+ for (letter, character) in zip(ALPHABET, self.alphabet):
+ self.mapping[name + '-' + letter] = (character, fg, bg)
+
+ if "default" in jsonmap:
+ self.default = parseSprite(jsonmap["default"])
+ for name, colour in jsonmap.get("msgcolours", {}).items():
+ self.message_styles[name] = TextStyle(*colour)
+ self.character_width = jsonmap.get("charwidth", self.character_width)
+