1
This commit is contained in:
@@ -114,6 +114,38 @@ static NSString * const kKBKeyboardLayoutI18nFileName = @"kb_keyboard_layouts_i1
|
||||
}
|
||||
}
|
||||
|
||||
- (NSArray<KBKeyboardRowConfig *> *)kb_mergeRowsFromBase:(NSArray<KBKeyboardRowConfig *> *)baseRows
|
||||
override:(NSArray<KBKeyboardRowConfig *> *)overrideRows {
|
||||
if (baseRows.count == 0) { return overrideRows ?: @[]; }
|
||||
if (overrideRows.count == 0) { return baseRows; }
|
||||
|
||||
NSUInteger maxCount = MAX(baseRows.count, overrideRows.count);
|
||||
NSMutableArray<KBKeyboardRowConfig *> *merged = [NSMutableArray arrayWithCapacity:maxCount];
|
||||
for (NSUInteger i = 0; i < maxCount; i++) {
|
||||
KBKeyboardRowConfig *baseRow = (i < baseRows.count) ? baseRows[i] : nil;
|
||||
KBKeyboardRowConfig *overrideRow = (i < overrideRows.count) ? overrideRows[i] : nil;
|
||||
if (!baseRow) {
|
||||
if (overrideRow) { [merged addObject:overrideRow]; }
|
||||
continue;
|
||||
}
|
||||
if (!overrideRow) {
|
||||
[merged addObject:baseRow];
|
||||
continue;
|
||||
}
|
||||
KBKeyboardRowConfig *row = [KBKeyboardRowConfig new];
|
||||
row.height = baseRow.height ?: overrideRow.height;
|
||||
row.insetLeft = baseRow.insetLeft ?: overrideRow.insetLeft;
|
||||
row.insetRight = baseRow.insetRight ?: overrideRow.insetRight;
|
||||
row.gap = baseRow.gap ?: overrideRow.gap;
|
||||
row.align = baseRow.align.length > 0 ? baseRow.align : overrideRow.align;
|
||||
BOOL hasOverrideItems = [overrideRow.items isKindOfClass:[NSArray class]] && ((NSArray *)overrideRow.items).count > 0;
|
||||
row.items = hasOverrideItems ? overrideRow.items : baseRow.items;
|
||||
row.segments = overrideRow.segments ?: baseRow.segments;
|
||||
[merged addObject:row];
|
||||
}
|
||||
return merged.copy;
|
||||
}
|
||||
|
||||
- (void)kb_loadI18nConfig {
|
||||
NSString *path = [[NSBundle mainBundle] pathForResource:kKBKeyboardLayoutI18nFileName ofType:@"json"];
|
||||
NSData *data = path.length ? [NSData dataWithContentsOfFile:path] : nil;
|
||||
@@ -143,9 +175,18 @@ static NSString * const kKBKeyboardLayoutI18nFileName = @"kb_keyboard_layouts_i1
|
||||
return;
|
||||
}
|
||||
KBKeyboardLayout *layout = [KBKeyboardLayout mj_objectWithKeyValues:obj];
|
||||
if (layout) {
|
||||
if (!layout) { return; }
|
||||
|
||||
KBKeyboardLayout *baseLayout = mergedLayouts[key];
|
||||
if (!baseLayout) {
|
||||
mergedLayouts[key] = layout;
|
||||
return;
|
||||
}
|
||||
|
||||
KBKeyboardLayout *mergedLayout = [KBKeyboardLayout new];
|
||||
mergedLayout.rows = [self kb_mergeRowsFromBase:baseLayout.rows override:layout.rows];
|
||||
mergedLayout.shiftRows = [self kb_mergeRowsFromBase:baseLayout.shiftRows override:layout.shiftRows];
|
||||
mergedLayouts[key] = mergedLayout;
|
||||
}];
|
||||
|
||||
self.layouts = mergedLayouts.copy;
|
||||
|
||||
Reference in New Issue
Block a user