1
0
Fork 0

qmk info: Add --ascii flag (#10793)

* `qmk info`: Add `--ascii` flag

* Fix typo

* Force ASCII for Windows/MSYS2

* Make it gooder

* Remove redundant windows check

* ...And this too

* Make pytest work on Windows
This commit is contained in:
Ryan 2020-11-02 19:41:01 +11:00 committed by GitHub
parent dc40f00aaf
commit e69da2db2c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 52 additions and 14 deletions

View file

@ -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