Store layers in separate array

This commit is contained in:
Johannes Marbach 2021-09-12 21:16:11 +02:00
parent fc54baa34e
commit 17e9b82604
5 changed files with 97 additions and 79 deletions

View file

@ -173,6 +173,46 @@ static const int scancode_nums_numbers_terminal_us[] = { \
0, 1, 1, 1 \
};
/* Layer array */
static const int num_layers_terminal_us = 3;
static const sq2lv_layer_t layers_terminal_us[] = {
{
.keycaps = keycaps_lower_terminal_us,
.attributes = attributes_lower_terminal_us,
.num_switchers = num_switchers_lower_terminal_us,
.switcher_idxs = switcher_idxs_lower_terminal_us,
.switcher_dests = switcher_dests_lower_terminal_us,
.num_scancodes = num_scancodes_lower_terminal_us,
.scancodes = scancodes_lower_terminal_us,
.scancode_idxs = scancode_idxs_lower_terminal_us,
.scancode_nums = scancode_nums_lower_terminal_us
},
{
.keycaps = keycaps_upper_terminal_us,
.attributes = attributes_upper_terminal_us,
.num_switchers = num_switchers_upper_terminal_us,
.switcher_idxs = switcher_idxs_upper_terminal_us,
.switcher_dests = switcher_dests_upper_terminal_us,
.num_scancodes = num_scancodes_upper_terminal_us,
.scancodes = scancodes_upper_terminal_us,
.scancode_idxs = scancode_idxs_upper_terminal_us,
.scancode_nums = scancode_nums_upper_terminal_us
},
{
.keycaps = keycaps_numbers_terminal_us,
.attributes = attributes_numbers_terminal_us,
.num_switchers = num_switchers_numbers_terminal_us,
.switcher_idxs = switcher_idxs_numbers_terminal_us,
.switcher_dests = switcher_dests_numbers_terminal_us,
.num_scancodes = num_scancodes_numbers_terminal_us,
.scancodes = scancodes_numbers_terminal_us,
.scancode_idxs = scancode_idxs_numbers_terminal_us,
.scancode_nums = scancode_nums_numbers_terminal_us
}
};
/**
* Public interface
**/
@ -180,42 +220,8 @@ static const int scancode_nums_numbers_terminal_us[] = { \
const sq2lv_layout_t sq2lv_layouts[] = {
/* US English (Terminal) */
{
.layers = (sq2lv_layer_t[]){
{
.keycaps = keycaps_lower_terminal_us,
.attributes = attributes_lower_terminal_us,
.num_switchers = num_switchers_lower_terminal_us,
.switcher_idxs = switcher_idxs_lower_terminal_us,
.switcher_dests = switcher_dests_lower_terminal_us,
.num_scancodes = num_scancodes_lower_terminal_us,
.scancodes = scancodes_lower_terminal_us,
.scancode_idxs = scancode_idxs_lower_terminal_us,
.scancode_nums = scancode_nums_lower_terminal_us
},
{
.keycaps = keycaps_upper_terminal_us,
.attributes = attributes_upper_terminal_us,
.num_switchers = num_switchers_upper_terminal_us,
.switcher_idxs = switcher_idxs_upper_terminal_us,
.switcher_dests = switcher_dests_upper_terminal_us,
.num_scancodes = num_scancodes_upper_terminal_us,
.scancodes = scancodes_upper_terminal_us,
.scancode_idxs = scancode_idxs_upper_terminal_us,
.scancode_nums = scancode_nums_upper_terminal_us
},
{
.keycaps = keycaps_numbers_terminal_us,
.attributes = attributes_numbers_terminal_us,
.num_switchers = num_switchers_numbers_terminal_us,
.switcher_idxs = switcher_idxs_numbers_terminal_us,
.switcher_dests = switcher_dests_numbers_terminal_us,
.num_scancodes = num_scancodes_numbers_terminal_us,
.scancodes = scancodes_numbers_terminal_us,
.scancode_idxs = scancode_idxs_numbers_terminal_us,
.scancode_nums = scancode_nums_numbers_terminal_us
}
},
.num_layers = 3
.num_layers = num_layers_terminal_us,
.layers = layers_terminal_us
}
};

View file

@ -36,10 +36,10 @@ typedef struct {
/* Layout type */
typedef struct {
/* Layers array */
const sq2lv_layer_t * const layers;
/* Total number of layers */
const int num_layers;
/* Layers array */
const sq2lv_layer_t * const layers;
} sq2lv_layout_t;
/* Layouts */

View file

@ -88,6 +88,34 @@ static const int switcher_dests_numbers_us[] = { \
0 \
};
/* Layer array */
static const int num_layers_us = 3;
static const sq2lv_layer_t layers_us[] = {
{
.keycaps = keycaps_lower_us,
.attributes = attributes_lower_us,
.num_switchers = num_switchers_lower_us,
.switcher_idxs = switcher_idxs_lower_us,
.switcher_dests = switcher_dests_lower_us
},
{
.keycaps = keycaps_upper_us,
.attributes = attributes_upper_us,
.num_switchers = num_switchers_upper_us,
.switcher_idxs = switcher_idxs_upper_us,
.switcher_dests = switcher_dests_upper_us
},
{
.keycaps = keycaps_numbers_us,
.attributes = attributes_numbers_us,
.num_switchers = num_switchers_numbers_us,
.switcher_idxs = switcher_idxs_numbers_us,
.switcher_dests = switcher_dests_numbers_us
}
};
/**
* Public interface
**/
@ -95,30 +123,8 @@ static const int switcher_dests_numbers_us[] = { \
const sq2lv_layout_t sq2lv_layouts[] = {
/* US English */
{
.layers = (sq2lv_layer_t[]){
{
.keycaps = keycaps_lower_us,
.attributes = attributes_lower_us,
.num_switchers = num_switchers_lower_us,
.switcher_idxs = switcher_idxs_lower_us,
.switcher_dests = switcher_dests_lower_us
},
{
.keycaps = keycaps_upper_us,
.attributes = attributes_upper_us,
.num_switchers = num_switchers_upper_us,
.switcher_idxs = switcher_idxs_upper_us,
.switcher_dests = switcher_dests_upper_us
},
{
.keycaps = keycaps_numbers_us,
.attributes = attributes_numbers_us,
.num_switchers = num_switchers_numbers_us,
.switcher_idxs = switcher_idxs_numbers_us,
.switcher_dests = switcher_dests_numbers_us
}
},
.num_layers = 3
.num_layers = num_layers_us,
.layers = layers_us
}
};

View file

@ -28,10 +28,10 @@ typedef struct {
/* Layout type */
typedef struct {
/* Layers array */
const sq2lv_layer_t * const layers;
/* Total number of layers */
const int num_layers;
/* Layers array */
const sq2lv_layer_t * const layers;
} sq2lv_layout_t;
/* Layouts */

View file

@ -665,10 +665,25 @@ if __name__ == '__main__':
c_builder.add_array(True, 'const int', f'scancode_nums_{layer_identifier}', scancode_nums, '', '')
c_builder.add_line()
c_builder.add_subsection_comment(f'Layer array')
c_builder.add_line()
c_builder.add_line(f'static const int num_layers_{layout_identifier} = {len(layer_identifiers)};')
c_builder.add_line()
c_builder.add_line(f'static const sq2lv_layer_t layers_{layout_identifier}[] = ' + '{')
for i, identifier in enumerate(layer_identifiers):
c_builder.add_line(' {')
fields = ['keycaps', 'attributes', 'num_switchers', 'switcher_idxs', 'switcher_dests']
if args.generate_scancodes:
fields += ['num_scancodes', 'scancodes', 'scancode_idxs', 'scancode_nums']
for k, field in enumerate(fields):
c_builder.add_line(f' .{field} = {field}_{identifier}{comma_if_needed(fields, k)}')
c_builder.add_line(' }' + comma_if_needed(layer_identifiers, i))
c_builder.add_line('};')
c_builder.add_line()
layouts.append({
'name': layout_id_to_layout_name(layout_id),
'identifier': layout_identifier,
'layer_identifiers': layer_identifiers
'identifier': layout_identifier
})
h_builder.add_line('/* Layout IDs, values can be used as indexes into the sq2lv_layouts array */')
@ -705,10 +720,10 @@ if __name__ == '__main__':
h_builder.add_line('/* Layout type */')
h_builder.add_line('typedef struct {')
h_builder.add_line(' /* Layers array */')
h_builder.add_line(' const sq2lv_layer_t * const layers;')
h_builder.add_line(' /* Total number of layers */')
h_builder.add_line(' const int num_layers;')
h_builder.add_line(' /* Layers array */')
h_builder.add_line(' const sq2lv_layer_t * const layers;')
h_builder.add_line('} sq2lv_layout_t;')
h_builder.add_line()
@ -727,17 +742,8 @@ if __name__ == '__main__':
for i, layout in enumerate(layouts):
c_builder.add_line(' /* ' + layout['name'] + ' */')
c_builder.add_line(' {')
c_builder.add_line(' .layers = (sq2lv_layer_t[]){')
for j, identifier in enumerate(layout['layer_identifiers']):
c_builder.add_line(' {')
fields = ['keycaps', 'attributes', 'num_switchers', 'switcher_idxs', 'switcher_dests']
if args.generate_scancodes:
fields += ['num_scancodes', 'scancodes', 'scancode_idxs', 'scancode_nums']
for k, field in enumerate(fields):
c_builder.add_line(f' .{field} = {field}_{identifier}{comma_if_needed(fields, k)}')
c_builder.add_line(' }' + comma_if_needed(layout['layer_identifiers'], j))
c_builder.add_line(' },')
c_builder.add_line(' .num_layers = ' + str(len(layout['layer_identifiers'])))
c_builder.add_line(' .num_layers = num_layers_' + layout['identifier'] + ',')
c_builder.add_line(' .layers = layers_' + layout['identifier'])
c_builder.add_line(' }' + comma_if_needed(layouts, i))
c_builder.add_line('};')
c_builder.add_line()