@ -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 ) :
def _search_keyboard_h ( path ) :
""" 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
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.