|
@@ -9,12 +9,19 @@ from milc import cli
|
|
from qmk.constants import ARM_PROCESSORS, AVR_PROCESSORS, VUSB_PROCESSORS
|
|
from qmk.constants import ARM_PROCESSORS, AVR_PROCESSORS, VUSB_PROCESSORS
|
|
from qmk.c_parse import find_layouts
|
|
from qmk.c_parse import find_layouts
|
|
from qmk.keyboard import config_h, rules_mk
|
|
from qmk.keyboard import config_h, rules_mk
|
|
|
|
+from qmk.makefile import parse_rules_mk_file
|
|
from qmk.math import compute
|
|
from qmk.math import compute
|
|
|
|
|
|
|
|
|
|
def info_json(keyboard):
|
|
def info_json(keyboard):
|
|
"""Generate the info.json data for a specific keyboard.
|
|
"""Generate the info.json data for a specific keyboard.
|
|
"""
|
|
"""
|
|
|
|
+ cur_dir = Path('keyboards')
|
|
|
|
+ rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk')
|
|
|
|
+ if 'DEFAULT_FOLDER' in rules:
|
|
|
|
+ keyboard = rules['DEFAULT_FOLDER']
|
|
|
|
+ rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk', rules)
|
|
|
|
+
|
|
info_data = {
|
|
info_data = {
|
|
'keyboard_name': str(keyboard),
|
|
'keyboard_name': str(keyboard),
|
|
'keyboard_folder': str(keyboard),
|
|
'keyboard_folder': str(keyboard),
|
|
@@ -22,7 +29,7 @@ def info_json(keyboard):
|
|
'maintainer': 'qmk',
|
|
'maintainer': 'qmk',
|
|
}
|
|
}
|
|
|
|
|
|
- for layout_name, layout_json in _find_all_layouts(keyboard).items():
|
|
|
|
|
|
+ for layout_name, layout_json in _find_all_layouts(keyboard, rules).items():
|
|
if not layout_name.startswith('LAYOUT_kc'):
|
|
if not layout_name.startswith('LAYOUT_kc'):
|
|
info_data['layouts'][layout_name] = layout_json
|
|
info_data['layouts'][layout_name] = layout_json
|
|
|
|
|
|
@@ -99,22 +106,24 @@ def _extract_rules_mk(info_data):
|
|
return info_data
|
|
return info_data
|
|
|
|
|
|
|
|
|
|
-def _find_all_layouts(keyboard):
|
|
|
|
- """Looks for layout macros associated with this keyboard.
|
|
|
|
- """
|
|
|
|
- layouts = {}
|
|
|
|
- rules = rules_mk(keyboard)
|
|
|
|
- keyboard_path = Path(rules.get('DEFAULT_FOLDER', keyboard))
|
|
|
|
-
|
|
|
|
- # Pull in all layouts defined in the standard files
|
|
|
|
|
|
+def _search_keyboard_h(path):
|
|
current_path = Path('keyboards/')
|
|
current_path = Path('keyboards/')
|
|
- for directory in keyboard_path.parts:
|
|
|
|
|
|
+ layouts = {}
|
|
|
|
+ for directory in path.parts:
|
|
current_path = current_path / directory
|
|
current_path = current_path / directory
|
|
keyboard_h = '%s.h' % (directory,)
|
|
keyboard_h = '%s.h' % (directory,)
|
|
keyboard_h_path = current_path / keyboard_h
|
|
keyboard_h_path = current_path / keyboard_h
|
|
if keyboard_h_path.exists():
|
|
if keyboard_h_path.exists():
|
|
layouts.update(find_layouts(keyboard_h_path))
|
|
layouts.update(find_layouts(keyboard_h_path))
|
|
|
|
|
|
|
|
+ return layouts
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def _find_all_layouts(keyboard, rules):
|
|
|
|
+ """Looks for layout macros associated with this keyboard.
|
|
|
|
+ """
|
|
|
|
+ layouts = _search_keyboard_h(Path(keyboard))
|
|
|
|
+
|
|
if not layouts:
|
|
if not layouts:
|
|
# If we didn't find any layouts above we widen our search. This is error
|
|
# If we didn't find any layouts above we widen our search. This is error
|
|
# prone which is why we want to encourage people to follow the standard above.
|
|
# prone which is why we want to encourage people to follow the standard above.
|