summary refs log tree commit diff
path: root/lib/python/qmk/keyboard.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python/qmk/keyboard.py')
-rw-r--r--lib/python/qmk/keyboard.py37
1 files changed, 29 insertions, 8 deletions
diff --git a/lib/python/qmk/keyboard.py b/lib/python/qmk/keyboard.py
index 9ebb2d77d3..a4c2873757 100644
--- a/lib/python/qmk/keyboard.py
+++ b/lib/python/qmk/keyboard.py
@@ -9,6 +9,25 @@ from glob import glob
 from qmk.c_parse import parse_config_h_file
 from qmk.makefile import parse_rules_mk_file
 
+BOX_DRAWING_CHARACTERS = {
+    "unicode": {
+        "tl": "┌",
+        "tr": "┐",
+        "bl": "└",
+        "br": "┘",
+        "v": "│",
+        "h": "─",
+    },
+    "ascii": {
+        "tl": " ",
+        "tr": " ",
+        "bl": "|",
+        "br": "|",
+        "v": "|",
+        "h": "_",
+    },
+}
+
 base_path = os.path.join(os.getcwd(), "keyboards") + os.path.sep
 
 
@@ -72,10 +91,12 @@ def rules_mk(keyboard):
     return rules
 
 
-def render_layout(layout_data, key_labels=None):
+def render_layout(layout_data, render_ascii, key_labels=None):
     """Renders a single layout.
     """
     textpad = [array('u', ' ' * 200) for x in range(50)]
+    style = 'ascii' if render_ascii else 'unicode'
+    box_chars = BOX_DRAWING_CHARACTERS[style]
 
     for key in layout_data:
         x = ceil(key.get('x', 0) * 4)
@@ -97,13 +118,13 @@ def render_layout(layout_data, key_labels=None):
             label = label[:label_len]
 
         label_blank = ' ' * label_len
-        label_border = '─' * label_len
+        label_border = box_chars['h'] * label_len
         label_middle = label + ' '*label_leftover  # noqa: yapf insists there be no whitespace around *
 
-        top_line = array('u', '┌' + label_border + '┐')
-        lab_line = array('u', '│' + label_middle + '│')
-        mid_line = array('u', '│' + label_blank + '│')
-        bot_line = array('u', '└' + label_border + "┘")
+        top_line = array('u', box_chars['tl'] + label_border + box_chars['tr'])
+        lab_line = array('u', box_chars['v'] + label_middle + box_chars['v'])
+        mid_line = array('u', box_chars['v'] + label_blank + box_chars['v'])
+        bot_line = array('u', box_chars['bl'] + label_border + box_chars['br'])
 
         textpad[y][x:x + w] = top_line
         textpad[y + 1][x:x + w] = lab_line
@@ -119,13 +140,13 @@ def render_layout(layout_data, key_labels=None):
     return '\n'.join(lines)
 
 
-def render_layouts(info_json):
+def render_layouts(info_json, render_ascii):
     """Renders all the layouts from an `info_json` structure.
     """
     layouts = {}
 
     for layout in info_json['layouts']:
         layout_data = info_json['layouts'][layout]['layout']
-        layouts[layout] = render_layout(layout_data)
+        layouts[layout] = render_layout(layout_data, render_ascii)
 
     return layouts