diff --git a/keyboards/axolstudio/yeti/hotswap/hotswap.c b/keyboards/axolstudio/yeti/hotswap/hotswap.c index 1de5f7fab243..f6d0bc70199d 100644 --- a/keyboards/axolstudio/yeti/hotswap/hotswap.c +++ b/keyboards/axolstudio/yeti/hotswap/hotswap.c @@ -98,7 +98,7 @@ led_config_t g_led_config = { }, { {0, 0},{16, 0},{32, 0},{48, 0},{64, 0},{80, 0},{96, 0},{112, 0},{128, 0},{144, 0},{160, 0},{176, 0},{192, 0},{208, 0},{224, 0}, {0, 16},{16,16},{32,16},{48,16},{64,16},{80,16},{96,16},{112,16},{128,16},{144,16},{160,16},{176,16},{192,16},{208,16},{224,16}, - {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},{128,32},{144,32},{160,32},{176,32},{192,32},{224}, + {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},{128,32},{144,32},{160,32},{176,32},{192,32},{224, 32}, {16,48},{32,48},{48,48},{64,48},{80,48},{96,48},{112,48},{128,48},{144,48},{160,48},{176,48},{192,48},{224,48}, {16,64},{48,64},{80,64},{96,64},{128,64},{160,64},{224,64} }, { diff --git a/keyboards/phase_studio/titan65/hotswap/hotswap.c b/keyboards/phase_studio/titan65/hotswap/hotswap.c index bc96b2d323be..9c6538abf9c5 100644 --- a/keyboards/phase_studio/titan65/hotswap/hotswap.c +++ b/keyboards/phase_studio/titan65/hotswap/hotswap.c @@ -20,7 +20,7 @@ led_config_t g_led_config = { { { 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, NO_LED, 65, 66 }, - { 51, NO_LED, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, .38, 37 }, + { 51, NO_LED, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37 }, { 23, NO_LED, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, NO_LED, 36 }, { NO_LED, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, NO_LED, 11, 10, 9 }, { 0, 1, NO_LED, 2, NO_LED, NO_LED, 3, NO_LED, NO_LED, NO_LED, 4, 5, NO_LED, 6, 7, 8 } diff --git a/keyboards/signum/3_0/3_0.h b/keyboards/signum/3_0/3_0.h index 9322b44b8b02..c857afd7c543 100644 --- a/keyboards/signum/3_0/3_0.h +++ b/keyboards/signum/3_0/3_0.h @@ -18,7 +18,7 @@ #include "quantum.h" // clang-format off -# define LAYOUT( \ +# define LAYOUT_ortho_4x12( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ @@ -30,4 +30,3 @@ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ } // clang-format on -#define LAYOUT_ortho_4x12 LAYOUT diff --git a/keyboards/signum/3_0/info.json b/keyboards/signum/3_0/info.json index a3f14c480f33..2966e5114e3c 100644 --- a/keyboards/signum/3_0/info.json +++ b/keyboards/signum/3_0/info.json @@ -2,6 +2,9 @@ "keyboard_name": "Signum 3.0", "url": "http://troyfletcher.net/", "maintainer": "jceb", + "layout_aliases": { + "LAYOUT": "LAYOUT_ortho_4x12" + }, "layouts": { "LAYOUT_ortho_4x12": { "layout": [ diff --git a/lib/python/qmk/c_parse.py b/lib/python/qmk/c_parse.py index 359aaccbbca2..4b49b8d4e926 100644 --- a/lib/python/qmk/c_parse.py +++ b/lib/python/qmk/c_parse.py @@ -24,6 +24,14 @@ def _get_chunks(it, size): return iter(lambda: tuple(islice(it, size)), ()) +def _preprocess_c_file(file): + """Load file and strip comments + """ + file_contents = file.read_text(encoding='utf-8') + file_contents = comment_remover(file_contents) + return file_contents.replace('\\\n', '') + + def strip_line_comment(string): """Removes comments from a single line string. """ @@ -58,9 +66,7 @@ def find_layouts(file): parsed_layouts = {} # Search the file for LAYOUT macros and aliases - file_contents = file.read_text(encoding='utf-8') - file_contents = comment_remover(file_contents) - file_contents = file_contents.replace('\\\n', '') + file_contents = _preprocess_c_file(file) for line in file_contents.split('\n'): if layout_macro_define_regex.match(line.lstrip()) and '(' in line and 'LAYOUT' in line: @@ -205,13 +211,23 @@ def _coerce_led_token(_type, value): return value_map[value] +def _validate_led_config(matrix, matrix_rows, matrix_indexes, position, position_raw, flags): + # TODO: Improve crude parsing/validation + if len(matrix) != matrix_rows and len(matrix) != (matrix_rows / 2): + raise ValueError("Unable to parse g_led_config matrix data") + if len(position) != len(flags): + raise ValueError("Unable to parse g_led_config position data") + if len(matrix_indexes) and (max(matrix_indexes) >= len(flags)): + raise ValueError("OOB within g_led_config matrix data") + if not all(isinstance(n, int) for n in matrix_indexes): + raise ValueError("matrix indexes are not all ints") + if (len(position_raw) % 2) != 0: + raise ValueError("Malformed g_led_config position data") + + def _parse_led_config(file, matrix_cols, matrix_rows): """Return any 'raw' led/rgb matrix config """ - file_contents = file.read_text(encoding='utf-8') - file_contents = comment_remover(file_contents) - file_contents = file_contents.replace('\\\n', '') - matrix_raw = [] position_raw = [] flags = [] @@ -219,7 +235,7 @@ def _parse_led_config(file, matrix_cols, matrix_rows): found_led_config = False bracket_count = 0 section = 0 - for _type, value in lex(file_contents, CLexer()): + for _type, value in lex(_preprocess_c_file(file), CLexer()): # Assume g_led_config..stuff..; if value == 'g_led_config': found_led_config = True @@ -248,17 +264,12 @@ def _parse_led_config(file, matrix_cols, matrix_rows): position = list(_get_chunks(position_raw, 2)) matrix_indexes = list(filter(lambda x: x is not None, matrix_raw)) - # If we have not found anything - bail + # If we have not found anything - bail with no error if not section: return None - # TODO: Improve crude parsing/validation - if len(matrix) != matrix_rows and len(matrix) != (matrix_rows / 2): - raise ValueError("Unable to parse g_led_config matrix data") - if len(position) != len(flags): - raise ValueError("Unable to parse g_led_config position data") - if len(matrix_indexes) and (max(matrix_indexes) >= len(flags)): - raise ValueError("OOB within g_led_config matrix data") + # Throw any validation errors + _validate_led_config(matrix, matrix_rows, matrix_indexes, position, position_raw, flags) return (matrix, position, flags)