diff --git a/CustomKeyboard/KeyboardViewController.m b/CustomKeyboard/KeyboardViewController.m index 0838ce9..9aae850 100644 --- a/CustomKeyboard/KeyboardViewController.m +++ b/CustomKeyboard/KeyboardViewController.m @@ -100,6 +100,8 @@ static NSString *KBFormatMB(uint64_t bytes) { [self kb_consumePendingShopSkin]; [self kb_applyDefaultSkinIfNeeded]; + [self kb_startObservingAppGroupChanges]; + // 监听 App Group 配置变化,动态切换键盘布局 [self kb_checkAndApplyLayoutIfNeeded]; } @@ -236,6 +238,7 @@ static NSString *KBFormatMB(uint64_t bytes) { removeObserver:self.kb_skinObserverToken]; self.kb_skinObserverToken = nil; } + [self kb_stopObservingAppGroupChanges]; [self kb_unregisterDarwinSkinInstallObserver]; #if DEBUG if (_kb_debugDidCountAlive) { @@ -275,10 +278,34 @@ static NSString *KBFormatMB(uint64_t bytes) { } - (void)kb_updateSuggestionEngineType:(NSString *)engineType { - // 根据 engineType 切换不同的联想引擎 - // 例如:latin, pinyin_traditional, pinyin_simplified, bopomofo NSLog(@"[KeyboardViewController] Switching suggestion engine to: %@", engineType); [[KBSuggestionEngine shared] setEngineTypeFromString:engineType]; } +#pragma mark - App Group KVO + +- (void)kb_startObservingAppGroupChanges { + NSUserDefaults *appGroup = [[NSUserDefaults alloc] initWithSuiteName:AppGroup]; + + __weak typeof(self) weakSelf = self; + self.kb_appGroupObserverToken = [[NSNotificationCenter defaultCenter] + addObserverForName:NSUserDefaultsDidChangeNotification + object:appGroup + queue:[NSOperationQueue mainQueue] + usingBlock:^(__unused NSNotification *_Nonnull note) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (!strongSelf) { return; } + [strongSelf kb_checkAndApplyLayoutIfNeeded]; + }]; + + NSLog(@"[KeyboardViewController] Started observing App Group changes"); +} + +- (void)kb_stopObservingAppGroupChanges { + if (self.kb_appGroupObserverToken) { + [[NSNotificationCenter defaultCenter] removeObserver:self.kb_appGroupObserverToken]; + self.kb_appGroupObserverToken = nil; + } +} + @end diff --git a/CustomKeyboard/KeyboardViewControllerHelp/KeyboardViewController+Private.h b/CustomKeyboard/KeyboardViewControllerHelp/KeyboardViewController+Private.h index cf1ceba..2efebb2 100644 --- a/CustomKeyboard/KeyboardViewControllerHelp/KeyboardViewController+Private.h +++ b/CustomKeyboard/KeyboardViewControllerHelp/KeyboardViewController+Private.h @@ -105,6 +105,7 @@ typedef NS_ENUM(NSInteger, KBKeyboardPanelMode) { @property(nonatomic, strong, nullable) id kb_fullAccessObserverToken; @property(nonatomic, strong, nullable) id kb_skinObserverToken; @property(nonatomic, assign) KBKeyboardPanelMode kb_panelMode; +@property(nonatomic, strong, nullable) id kb_appGroupObserverToken; @end diff --git a/CustomKeyboard/Manager/KBSuggestionEngine.m b/CustomKeyboard/Manager/KBSuggestionEngine.m index af943a1..142b8b0 100644 --- a/CustomKeyboard/Manager/KBSuggestionEngine.m +++ b/CustomKeyboard/Manager/KBSuggestionEngine.m @@ -12,6 +12,8 @@ @property (nonatomic, strong) NSSet *priorityWords; @property (nonatomic, copy) NSArray *traditionalChineseWords; @property (nonatomic, copy) NSArray *simplifiedChineseWords; +@property (nonatomic, strong) NSDictionary *> *pinyinToTraditionalMap; +@property (nonatomic, strong) NSDictionary *> *bopomofoToChineseMap; @end @implementation KBSuggestionEngine @@ -34,6 +36,8 @@ _words = [self kb_loadWords]; _traditionalChineseWords = [self kb_loadTraditionalChineseWords]; _simplifiedChineseWords = [self kb_loadSimplifiedChineseWords]; + _pinyinToTraditionalMap = [self kb_loadPinyinToTraditionalMap]; + _bopomofoToChineseMap = [self kb_loadBopomofoToChineseMap]; } return self; } @@ -206,61 +210,204 @@ #pragma mark - Traditional Chinese Pinyin Suggestions - (NSArray *)kb_traditionalPinyinSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit { - // 繁体拼音联想:输入拼音,返回繁体中文候选词 NSString *lower = prefix.lowercaseString; NSMutableArray *matches = [NSMutableArray array]; - // 这里应该使用拼音到繁体字的映射表 - // 目前先返回一些常用繁体词作为示例 + NSArray *directMatches = self.pinyinToTraditionalMap[lower]; + if (directMatches.count > 0) { + [matches addObjectsFromArray:directMatches]; + } + + for (NSString *key in self.pinyinToTraditionalMap) { + if ([key hasPrefix:lower] && ![key isEqualToString:lower]) { + NSArray *candidates = self.pinyinToTraditionalMap[key]; + [matches addObjectsFromArray:candidates]; + if (matches.count >= limit * 2) { + break; + } + } + } + + if (matches.count == 0) { + return [self kb_fallbackTraditionalSuggestions:lower limit:limit]; + } + + [matches sortUsingComparator:^NSComparisonResult(NSString *a, NSString *b) { + NSInteger ca = self.selectionCounts[a].integerValue; + NSInteger cb = self.selectionCounts[b].integerValue; + if (ca != cb) { + return (cb > ca) ? NSOrderedAscending : NSOrderedDescending; + } + return [a compare:b]; + }]; + + if (matches.count > limit) { + return [matches subarrayWithRange:NSMakeRange(0, limit)]; + } + return matches.copy; +} + +- (NSArray *)kb_fallbackTraditionalSuggestions:(NSString *)prefix limit:(NSUInteger)limit { + NSMutableArray *matches = [NSMutableArray array]; for (NSString *word in self.traditionalChineseWords) { - // TODO: 实现拼音匹配逻辑 - // 这里需要一个拼音库来将输入的拼音转换为繁体字 [matches addObject:word]; if (matches.count >= limit) { break; } } - return matches.copy; } #pragma mark - Simplified Chinese Pinyin Suggestions - (NSArray *)kb_simplifiedPinyinSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit { - // 简体拼音联想:输入拼音,返回简体中文候选词 NSString *lower = prefix.lowercaseString; NSMutableArray *matches = [NSMutableArray array]; - // 这里应该使用拼音到简体字的映射表 + NSArray *directMatches = self.pinyinToTraditionalMap[lower]; + if (directMatches.count > 0) { + for (NSString *tradChar in directMatches) { + NSString *simplified = [self kb_toSimplified:tradChar]; + if (simplified.length > 0) { + [matches addObject:simplified]; + } + } + } + + for (NSString *key in self.pinyinToTraditionalMap) { + if ([key hasPrefix:lower] && ![key isEqualToString:lower]) { + NSArray *candidates = self.pinyinToTraditionalMap[key]; + for (NSString *tradChar in candidates) { + NSString *simplified = [self kb_toSimplified:tradChar]; + if (simplified.length > 0) { + [matches addObject:simplified]; + } + } + if (matches.count >= limit * 2) { + break; + } + } + } + + if (matches.count == 0) { + return [self kb_fallbackSimplifiedSuggestions:lower limit:limit]; + } + + [matches sortUsingComparator:^NSComparisonResult(NSString *a, NSString *b) { + NSInteger ca = self.selectionCounts[a].integerValue; + NSInteger cb = self.selectionCounts[b].integerValue; + if (ca != cb) { + return (cb > ca) ? NSOrderedAscending : NSOrderedDescending; + } + return [a compare:b]; + }]; + + if (matches.count > limit) { + return [matches subarrayWithRange:NSMakeRange(0, limit)]; + } + return matches.copy; +} + +- (NSArray *)kb_fallbackSimplifiedSuggestions:(NSString *)prefix limit:(NSUInteger)limit { + NSMutableArray *matches = [NSMutableArray array]; for (NSString *word in self.simplifiedChineseWords) { - // TODO: 实现拼音匹配逻辑 [matches addObject:word]; if (matches.count >= limit) { break; } } - return matches.copy; } +- (NSString *)kb_toSimplified:(NSString *)traditional { + static NSDictionary *tradToSimpMap = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + tradToSimpMap = @{ + @"臺": @"台", @"臺": @"台", @"灣": @"湾", @"語": @"语", @"體": @"体", + @"國": @"国", @"學": @"学", @"時": @"时", @"問": @"问", @"見": @"见", + @"經": @"经", @"動": @"动", @"長": @"长", @"開": @"开", @"關": @"关", + @"無": @"无", @"說": @"说", @"書": @"书", @"電": @"电", @"機": @"机", + @"氣": @"气", @"這": @"这", @"們": @"们", @"個": @"个", @"對": @"对", + @"來": @"来", @"還": @"还", @"過": @"过", @"會": @"会", @"進": @"进", + @"開": @"开", @"頭": @"头", @"點": @"点", @"問": @"问", @"題": @"题", + @"變": @"变", @"條": @"条", @"東": @"东", @"車": @"车", @"錢": @"钱", + @"門": @"门", @"聽": @"听", @"聲": @"声", @"醫": @"医", @"讓": @"让", + @"識": @"识", @"務": @"务", @"農": @"农", @"業": @"业", @"產": @"产", + @"黨": @"党", @"歷": @"历", @"史": @"史", @"後": @"后", @"前": @"前", + @"強": @"强", @"當": @"当", @"應": @"应", @"從": @"从", @"優": @"优", + @"兒": @"儿", @"兩": @"两", @"幾": @"几", @"廣": @"广", @"場": @"场", + @"決": @"决", @"許": @"许", @"設": @"设", @"請": @"请", @"論": @"论", + @"認": @"认", @"斷": @"断", @"離": @"离", @"須": @"须", @"導": @"导", + @"爭": @"争", @"重": @"重", @"輕": @"轻", @"難": @"难", @"極": @"极", + @"據": @"据", @"實": @"实", @"際": @"际", @"標": @"标", @"準": @"准", + @"確": @"确", @"證": @"证", @"驗": @"验", @"權": @"权", @"規": @"规", + @"則": @"则", @"劃": @"划", @"計": @"计", @"劃": @"划", @"術": @"术", + @"藝": @"艺", @"術": @"术", @"選": @"选", @"舉": @"举", @"團": @"团", + @"結": @"结", @"組": @"组", @"織": @"织", @"義": @"义", @"務": @"务", + @"親": @"亲", @"愛": @"爱", @"情": @"情", @"懷": @"怀", @"家": @"家", + @"屬": @"属", @"幫": @"帮", @"助": @"助", @"友": @"友", @"誼": @"谊", + @"謝": @"谢", @"謝": @"谢", @"對": @"对", @"起": @"起", @"早": @"早", + @"安": @"安", @"晚": @"晚", @"請": @"请", @"問": @"问", @"沒": @"没", + @"關": @"关", @"係": @"系", @"加": @"加", @"油": @"油", @"台": @"台", + @"北": @"北", @"高": @"高", @"雄": @"雄", @"中": @"中", @"南": @"南", + @"朋": @"朋", @"友": @"友", @"人": @"人", @"工": @"工", @"作": @"作", + @"習": @"习", @"生": @"生", @"活": @"活", @"地": @"地", @"方": @"方", + @"法": @"法", @"答": @"答", @"喜": @"喜", @"歡": @"欢", @"想": @"想", + @"念": @"念", @"開": @"开", @"心": @"心", @"快": @"快", @"樂": @"乐", + @"美": @"美", @"麗": @"丽", @"漂": @"漂", @"亮": @"亮", @"帥": @"帅", + @"氣": @"气", @"可": @"可", @"愛": @"爱", @"溫": @"温", @"柔": @"柔" + }; + }); + + if (tradToSimpMap[traditional]) { + return tradToSimpMap[traditional]; + } + + NSMutableString *result = [traditional mutableCopy]; + [tradToSimpMap enumerateKeysAndObjectsUsingBlock:^(NSString *trad, NSString *simp, BOOL *stop) { + [result replaceOccurrencesOfString:trad withString:simp options:0 range:NSMakeRange(0, result.length)]; + }]; + + return result.length > 0 ? [result copy] : traditional; +} + #pragma mark - Bopomofo (Zhuyin) Suggestions - (NSArray *)kb_bopomofoSuggestionsForPrefix:(NSString *)prefix limit:(NSUInteger)limit { - // 注音联想:输入注音符号,返回繁体中文候选词 NSMutableArray *matches = [NSMutableArray array]; - // 这里应该使用注音到繁体字的映射表 - // 注音符号:ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙ - // 韵母:ㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ - // 声调:ˊˇˋ˙ - for (NSString *word in self.traditionalChineseWords) { - // TODO: 实现注音匹配逻辑 - [matches addObject:word]; - if (matches.count >= limit) { - break; + NSArray *directMatches = self.bopomofoToChineseMap[prefix]; + if (directMatches.count > 0) { + [matches addObjectsFromArray:directMatches]; + } + + for (NSString *key in self.bopomofoToChineseMap) { + if ([key hasPrefix:prefix] && ![key isEqualToString:prefix]) { + NSArray *candidates = self.bopomofoToChineseMap[key]; + [matches addObjectsFromArray:candidates]; + if (matches.count >= limit * 2) { + break; + } } } + if (matches.count == 0) { + return [self kb_fallbackTraditionalSuggestions:prefix limit:limit]; + } + + [matches sortUsingComparator:^NSComparisonResult(NSString *a, NSString *b) { + NSInteger ca = self.selectionCounts[a].integerValue; + NSInteger cb = self.selectionCounts[b].integerValue; + if (ca != cb) { + return (cb > ca) ? NSOrderedAscending : NSOrderedDescending; + } + return [a compare:b]; + }]; + + if (matches.count > limit) { + return [matches subarrayWithRange:NSMakeRange(0, limit)]; + } return matches.copy; } @@ -281,7 +428,6 @@ } - (NSArray *)kb_loadSimplifiedChineseWords { - // 加载简体中文常用词 return @[ @"你好", @"谢谢", @"对不起", @"再见", @"早安", @"晚安", @"请问", @"不好意思", @"没关系", @"加油", @@ -293,4 +439,96 @@ ]; } +#pragma mark - Pinyin & Bopomofo Map Loading + +- (NSDictionary *> *)kb_loadPinyinToTraditionalMap { + NSString *path = [[NSBundle mainBundle] pathForResource:@"pinyin_to_traditional" ofType:@"json"]; + if (!path) { + NSLog(@"[KBSuggestionEngine] pinyin_to_traditional.json not found, using empty map"); + return @{}; + } + + NSData *data = [NSData dataWithContentsOfFile:path]; + if (!data) { + NSLog(@"[KBSuggestionEngine] Failed to read pinyin_to_traditional.json"); + return @{}; + } + + NSError *error = nil; + NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; + if (error || ![json isKindOfClass:NSDictionary.class]) { + NSLog(@"[KBSuggestionEngine] Failed to parse pinyin_to_traditional.json: %@", error); + return @{}; + } + + NSDictionary *mappings = json[@"mappings"]; + if (![mappings isKindOfClass:NSDictionary.class]) { + NSLog(@"[KBSuggestionEngine] Invalid mappings in pinyin_to_traditional.json"); + return @{}; + } + + NSMutableDictionary *> *result = [NSMutableDictionary dictionary]; + [mappings enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { + if ([obj isKindOfClass:NSArray.class]) { + NSMutableArray *chars = [NSMutableArray array]; + for (id item in (NSArray *)obj) { + if ([item isKindOfClass:NSString.class]) { + [chars addObject:item]; + } + } + if (chars.count > 0) { + result[key] = [chars copy]; + } + } + }]; + + NSLog(@"[KBSuggestionEngine] Loaded %lu pinyin mappings", (unsigned long)result.count); + return [result copy]; +} + +- (NSDictionary *> *)kb_loadBopomofoToChineseMap { + NSString *path = [[NSBundle mainBundle] pathForResource:@"bopomofo_to_chinese" ofType:@"json"]; + if (!path) { + NSLog(@"[KBSuggestionEngine] bopomofo_to_chinese.json not found, using empty map"); + return @{}; + } + + NSData *data = [NSData dataWithContentsOfFile:path]; + if (!data) { + NSLog(@"[KBSuggestionEngine] Failed to read bopomofo_to_chinese.json"); + return @{}; + } + + NSError *error = nil; + NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; + if (error || ![json isKindOfClass:NSDictionary.class]) { + NSLog(@"[KBSuggestionEngine] Failed to parse bopomofo_to_chinese.json: %@", error); + return @{}; + } + + NSDictionary *mappings = json[@"mappings"]; + if (![mappings isKindOfClass:NSDictionary.class]) { + NSLog(@"[KBSuggestionEngine] Invalid mappings in bopomofo_to_chinese.json"); + return @{}; + } + + NSMutableDictionary *> *result = [NSMutableDictionary dictionary]; + [mappings enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { + if ([obj isKindOfClass:NSArray.class]) { + NSMutableArray *chars = [NSMutableArray array]; + for (id item in (NSArray *)obj) { + if ([item isKindOfClass:NSString.class]) { + [chars addObject:item]; + } + } + if (chars.count > 0) { + result[key] = [chars copy]; + } + } + }]; + + NSLog(@"[KBSuggestionEngine] Loaded %lu bopomofo mappings", (unsigned long)result.count); + return [result copy]; +} + @end diff --git a/CustomKeyboard/Model/KBKeyboardLayoutConfig.m b/CustomKeyboard/Model/KBKeyboardLayoutConfig.m index 64147eb..589f26d 100644 --- a/CustomKeyboard/Model/KBKeyboardLayoutConfig.m +++ b/CustomKeyboard/Model/KBKeyboardLayoutConfig.m @@ -8,6 +8,7 @@ #import "KBConfig.h" static NSString * const kKBKeyboardLayoutConfigFileName = @"kb_keyboard_layout_config"; +static NSString * const kKBKeyboardLayoutI18nFileName = @"kb_keyboard_layouts_i18n"; @implementation KBKeyboardLayoutMetrics @end @@ -92,13 +93,66 @@ static NSString * const kKBKeyboardLayoutConfigFileName = @"kb_keyboard_layout_c static KBKeyboardLayoutConfig *config = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - NSString *path = [[NSBundle mainBundle] pathForResource:kKBKeyboardLayoutConfigFileName ofType:@"json"]; - NSData *data = path.length ? [NSData dataWithContentsOfFile:path] : nil; - config = data ? [KBKeyboardLayoutConfig configFromJSONData:data] : nil; + config = [[KBKeyboardLayoutConfig alloc] init]; + [config kb_loadMainConfig]; + [config kb_loadI18nConfig]; }); return config; } +- (void)kb_loadMainConfig { + NSString *path = [[NSBundle mainBundle] pathForResource:kKBKeyboardLayoutConfigFileName ofType:@"json"]; + NSData *data = path.length ? [NSData dataWithContentsOfFile:path] : nil; + if (data.length == 0) { return; } + + KBKeyboardLayoutConfig *mainConfig = [KBKeyboardLayoutConfig configFromJSONData:data]; + if (mainConfig) { + self.metrics = mainConfig.metrics; + self.designWidth = mainConfig.designWidth; + self.keyDefs = mainConfig.keyDefs; + self.layouts = mainConfig.layouts; + } +} + +- (void)kb_loadI18nConfig { + NSString *path = [[NSBundle mainBundle] pathForResource:kKBKeyboardLayoutI18nFileName ofType:@"json"]; + NSData *data = path.length ? [NSData dataWithContentsOfFile:path] : nil; + if (data.length == 0) { + NSLog(@"[KBKeyboardLayoutConfig] i18n layout file not found"); + return; + } + + NSError *error = nil; + id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; + if (error || ![json isKindOfClass:[NSDictionary class]]) { + NSLog(@"[KBKeyboardLayoutConfig] Failed to parse i18n layout file: %@", error); + return; + } + + NSDictionary *dict = (NSDictionary *)json; + NSDictionary *layoutsRaw = dict[@"layouts"]; + if (![layoutsRaw isKindOfClass:[NSDictionary class]]) { + NSLog(@"[KBKeyboardLayoutConfig] No layouts found in i18n file"); + return; + } + + NSMutableDictionary *mergedLayouts = [NSMutableDictionary dictionaryWithDictionary:self.layouts ?: @{}]; + + [layoutsRaw enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + if (![key isKindOfClass:[NSString class]] || ![obj isKindOfClass:[NSDictionary class]]) { + return; + } + KBKeyboardLayout *layout = [KBKeyboardLayout mj_objectWithKeyValues:obj]; + if (layout) { + mergedLayouts[key] = layout; + } + }]; + + self.layouts = mergedLayouts.copy; + NSLog(@"[KBKeyboardLayoutConfig] Loaded %lu i18n layouts, total: %lu", + (unsigned long)layoutsRaw.count, (unsigned long)self.layouts.count); +} + + (instancetype)configFromJSONData:(NSData *)data { if (data.length == 0) { return nil; } NSError *error = nil; diff --git a/CustomKeyboard/Resource/bopomofo_to_chinese.json b/CustomKeyboard/Resource/bopomofo_to_chinese.json new file mode 100644 index 0000000..455757c --- /dev/null +++ b/CustomKeyboard/Resource/bopomofo_to_chinese.json @@ -0,0 +1,345 @@ +{ + "__comment": "注音符号映射表:注音组合 -> 繁体字候选词列表", + "__comment_symbols": "聲母: ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙ", + "__comment_vowels": "韻母: ㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ", + "__comment_tones": "聲調: ˊ(二聲) ˇ(三聲) ˋ(四聲) ˙(輕聲), 無符號為一聲", + "mappings": { + "ㄅㄚ": ["八", "巴", "吧", "爸", "拔", "罷", "霸", "扒", "叭", "芭", "疤", "粑"], + "ㄅㄞ": ["白", "百", "拜", "敗", "柏", "擺", "佰", "佰"], + "ㄅㄢ": ["班", "般", "板", "版", "半", "伴", "扮", "拌", "瓣", "頒", "斑", "搬"], + "ㄅㄤ": ["幫", "邦", "榜", "膀", "綁", "棒", "磅", "邦"], + "ㄅㄠ": ["包", "保", "報", "寶", "抱", "暴", "爆", "薄", "豹", "飽", "堡", "刨", "苞", "胞", "雹"], + "ㄅㄟ": ["北", "被", "背", "備", "悲", "杯", "碑", "輩", "倍", "貝", "臂"], + "ㄅㄣ": ["本", "奔", "笨", "盆", "賁"], + "ㄅㄥ": ["崩", "繃", "蹦", "泵", "甭"], + "ㄅㄧ": ["比", "必", "筆", "畢", "避", "閉", "鼻", "彼", "碧", "壁", "弊", "臂", "秘", "辟", "逼", "幣", "庇", "痹", "匕"], + "ㄅㄧㄝ": ["別", "憋", "癟", "鱉"], + "ㄅㄧㄢ": ["變", "便", "邊", "編", "辯", "遍", "鞭", "辨", "扁", "貶", "匾", "蝙"], + "ㄅㄧㄠ": ["表", "標", "彪", "錶", "鏢", "錶", "裱", "婊"], + "ㄅㄧㄣ": ["賓", "彬", "斌", "瀕", "濱", "殯", "鬢"], + "ㄅㄧㄥ": ["病", "並", "冰", "兵", "餅", "柄", "秉", "稟", "炳", "稟"], + "ㄅㄛ": ["波", "博", "播", "伯", "薄", "泊", "柏", "勃", "搏", "撥", "剝", "脖", "卜", "玻", "柏"], + "ㄅㄨ": ["不", "步", "部", "布", "補", "捕", "簿", "卜", "怖", "哺", "埠", "簿"], + "ㄆㄚ": ["趴", "啪", "葩", "扒"], + "ㄆㄞ": ["排", "拍", "牌", "派", "徘", "湃", "俳"], + "ㄆㄢ": ["判", "盤", "盼", "攀", "畔", "胖", "叛", "潘", "磐", "蹣", "拚", "泮"], + "ㄆㄤ": ["旁", "胖", "龐", "膀", "磅", "彷", "螃", "乓"], + "ㄆㄠ": ["跑", "炮", "泡", "拋", "刨", "袍", "咆", "庖", "匏"], + "ㄆㄟ": ["配", "陪", "培", "賠", "佩", "沛", "裴", "胚", "霈"], + "ㄆㄣ": ["噴", "盆"], + "ㄆㄥ": ["朋", "碰", "彭", "棚", "蓬", "鵬", "捧", "烹", "澎", "怦", "砰", "堋"], + "ㄆㄧ": ["皮", "批", "披", "匹", "疲", "僻", "脾", "劈", "琵", "毗", "啤", "坯", "譬", "霹", "屁", "闢", "紕", "闢"], + "ㄆㄧㄝ": ["撇", "瞥", "苤"], + "ㄆㄧㄢ": ["片", "便", "騙", "偏", "篇", "翩", "扁", "諞", "騙"], + "ㄆㄧㄠ": ["票", "飄", "漂", "瓢", "嫖", "縹", "驃", "飄"], + "ㄆㄧㄣ": ["品", "貧", "頻", "聘", "拼", "拚", "嬪"], + "ㄆㄧㄥ": ["平", "評", "憑", "瓶", "萍", "屏", "蘋", "坪", "秤", "娉", "馮", "萍"], + "ㄆㄛ": ["破", "迫", "婆", "頗", "坡", "潑", "泊", "魄", "粕", "朴", "珀", "叵", "鄱"], + "ㄆㄨ": ["普", "鋪", "樸", "譜", "浦", "葡", "蒲", "僕", "撲", "圃", "濮", "璞", "噗", "莆"], + "ㄇㄚ": ["媽", "馬", "麻", "罵", "嘛", "螞", "碼", "瑪", "抹", "摩", "螞"], + "ㄇㄞ": ["買", "賣", "麥", "埋", "邁", "脈", "霾", "賣"], + "ㄇㄢ": ["滿", "慢", "曼", "漫", "蠻", "瞞", "饅", "蔓", "謾", "墁", "幔", "曼"], + "ㄇㄤ": ["忙", "盲", "茫", "芒", "莽", "氓", "硭", "邙"], + "ㄇㄠ": ["貓", "毛", "矛", "茅", "茂", "冒", "帽", "貌", "貿", "卯", "錨", "耄", "髦", "瑁", "懋", "卯"], + "ㄇㄟ": ["沒", "美", "妹", "每", "梅", "媒", "煤", "眉", "霉", "魅", "玫", "枚", "寐", "昧", "媚", "湄", "鎂", "糜", "梅"], + "ㄇㄣ": ["們", "門", "悶", "燜", "捫", "悶"], + "ㄇㄥ": ["夢", "孟", "猛", "蒙", "盟", "萌", "朦", "檬", "懵", "礞", "甍", "萌"], + "ㄇㄧ": ["米", "密", "迷", "蜜", "祕", "眯", "靡", "糜", "彌", "覓", "冪", "泌", "祕", "謎"], + "ㄇㄧㄝ": ["滅", "蔑", "篾", "乜", "咩"], + "ㄇㄧㄢ": ["面", "免", "棉", "眠", "綿", "勉", "緬", "冕", "娩", "湎", "眄", "冕"], + "ㄇㄧㄠ": ["描", "秒", "妙", "廟", "苗", "瞄", "渺", "淼", "緲", "藐", "喵"], + "ㄇㄧㄣ": ["民", "敏", "名", "皿", "閔", "抿", "泯", "憫", "閔", "愍"], + "ㄇㄧㄥ": ["名", "明", "命", "鳴", "銘", "冥", "茗", "溟", "瞑", "螟", "銘"], + "ㄇㄛ": ["麼", "摸", "磨", "摩", "魔", "膜", "默", "墨", "抹", "末", "莫", "漠", "寞", "陌", "謨", "茉", "驀", "歿", "麼"], + "ㄇㄡ": ["某", "謀", "牟", "眸", "繆", "鍪", "哞"], + "ㄇㄨ": ["目", "母", "木", "幕", "牧", "慕", "墓", "暮", "穆", "睦", "沐", "募", "姆", "拇", "牡", "畝", "慕"], + "ㄈㄚ": ["發", "法", "罰", "乏", "伐", "閥", "筏", "佳", "髮", "法"], + "ㄈㄢ": ["反", "飯", "煩", "繁", "範", "犯", "泛", "番", "翻", "凡", "帆", "返", "販", "礬", "釩", "蕃"], + "ㄈㄤ": ["方", "放", "房", "防", "訪", "仿", "芳", "坊", "妨", "紡", "舫", "肪", "仿"], + "ㄈㄟ": ["非", "飛", "費", "肥", "廢", "匪", "誹", "啡", "菲", "沸", "翡", "吠", "肺", "狒", "妃"], + "ㄈㄣ": ["分", "份", "粉", "奮", "憤", "紛", "芬", "墳", "焚", "氛", "糞", "吩", "汾"], + "ㄈㄥ": ["風", "封", "豐", "峰", "鋒", "蜂", "瘋", "逢", "縫", "鳳", "奉", "諷", "楓", "烽", "豐", "峰"], + "ㄈㄛ": ["佛", "彿"], + "ㄈㄡ": ["否", "縫", "缶"], + "ㄈㄨ": ["父", "夫", "付", "服", "福", "府", "負", "富", "復", "副", "婦", "撫", "附", "幅", "浮", "腐", "符", "弗", "腹", "輻", "敷", "氟", "芙", "敷", "伏", "扶", "俘", "袱", "芙", "斧", "脯", "腑", "滏", "蚨", "跗", "馥"], + "ㄉㄚ": ["大", "打", "答", "達", "搭", "塔", "瘩", "妲", "怛", "耷"], + "ㄉㄞ": ["大", "代", "帶", "待", "袋", "戴", "呆", "貸", "逮", "怠", "殆", "黛", "岱", "迨"], + "ㄉㄢ": ["但", "單", "擔", "膽", "丹", "淡", "蛋", "誕", "彈", "旦", "氮", "耽", "憚", "殫", "瘅", "眈"], + "ㄉㄤ": ["當", "黨", "檔", "擋", "蕩", "宕", "檔", "璫", "璫"], + "ㄉㄠ": ["到", "道", "導", "刀", "倒", "島", "盜", "悼", "搗", "禱", "蹈", "叨", "忉", "氘"], + "ㄉㄜ": ["的", "得", "德", "底", "德"], + "ㄉㄥ": ["等", "燈", "登", "鄧", "瞪", "凳", "蹬", "噔", "嶝"], + "ㄉㄧ": ["的", "地", "第", "低", "底", "敵", "弟", "帝", "抵", "遞", "迪", "滴", "堤", "笛", "締", "嫡", "詆", "邸", "砥", "睇", "鏑"], + "ㄉㄧㄝ": ["爹", "跌", "叠", "蝶", "碟", "諜", "迭", "帖", "耋", "牒", "瓞", "鰈"], + "ㄉㄧㄢ": ["點", "電", "店", "典", "墊", "澱", "殿", "顛", "滇", "碘", "巔", "癲", "惦", "奠", "甸", "阽"], + "ㄉㄧㄠ": ["調", "掉", "吊", "雕", "刁", "釣", "凋", "碉", "貂", "雕"], + "ㄉㄧㄥ": ["定", "訂", "頂", "丁", "釘", "盯", "叮", "鼎", "叮", "丁", "町"], + "ㄉㄨ": ["讀", "都", "度", "獨", "毒", "渡", "杜", "肚", "堵", "賭", "鍍", "督", "篤", "嘟", "睹", "妒", "芏"], + "ㄉㄨㄢ": ["段", "斷", "短", "鍛", "緞", "端", "椴", "煅"], + "ㄉㄨㄟ": ["對", "隊", "堆", "兌", "懟", "憝"], + "ㄉㄨㄣ": ["頓", "噸", "盾", "蹲", "敦", "墩", "燉", "鈍", "囤", "遁", "燉"], + "ㄉㄨㄛ": ["多", "度", "奪", "躲", "朵", "墮", "舵", "跺", "惰", "哆", "垛", "躲", "踱", "剁", "咄"], + "ㄊㄚ": ["他", "她", "它", "塔", "踏", "拓", "榻", "獺", "撻", "闒", "遢", "遢"], + "ㄊㄞ": ["太", "台", "臺", "態", "泰", "抬", "胎", "鮐", "薹", "駘", "炱", "邰", "苔", "颱"], + "ㄊㄢ": ["談", "探", "彈", "壇", "攤", "貪", "嘆", "潭", "坦", "毯", "痰", "檀", "譚", "忐", "袒", "郯", "澹", "覃", "忐", "曇", "忐"], + "ㄊㄤ": ["堂", "唐", "糖", "躺", "趟", "湯", "燙", "塘", "膛", "棠", "搪", "螳", "鏜", "鐋", "耥", "鏜"], + "ㄊㄠ": ["套", "逃", "桃", "陶", "討", "濤", "掏", "滔", "萄", "淘", "燾", "絳", "叨", "洮", "啕", "饕"], + "ㄊㄜ": ["特", "忒", "慝", "鋱", "忒"], + "ㄊㄥ": ["疼", "騰", "藤", "滕", "謄", "疼", "滕"], + "ㄊㄧ": ["提", "題", "體", "替", "踢", "梯", "剔", "蹄", "啼", "惕", "涕", "銻", "倜", "悌", "嚏", "醍", "緹"], + "ㄊㄧㄝ": ["鐵", "貼", "帖", "萜", "帖", "餮"], + "ㄊㄧㄢ": ["天", "田", "填", "甜", "添", "恬", "腆", "殄", "忝", "闐", "祆", "忝"], + "ㄊㄧㄠ": ["條", "跳", "調", "挑", "眺", "佻", "祧", "銚", "髫", "鰷", "調", "眺"], + "ㄊㄧㄥ": ["聽", "停", "庭", "挺", "廳", "廷", "亭", "婷", "艇", "汀", "蜓", "霆", "鋌", "莛", "汀"], + "ㄊㄨ": ["圖", "土", "突", "途", "吐", "兔", "屠", "徒", "凸", "禿", "荼", "釷", "菟", "兔"], + "ㄊㄨㄢ": ["團", "摶", "彖", "湍", "摶"], + "ㄊㄨㄟ": ["推", "退", "腿", "蛻", "頹", "褪", "忒"], + "ㄊㄨㄣ": ["吞", "屯", "臀", "囤", "褪", "豚", "吞"], + "ㄊㄨㄛ": ["脫", "托", "拖", "妥", "拓", "唾", "陀", "沱", "坨", "駝", "鴕", "橐", "砣", "佗", "跎", "坨", "酡"], + "ㄋㄚ": ["那", "拿", "哪", "納", "吶", "娜", "鈉", "衲", "鎿"], + "ㄋㄞ": ["奶", "耐", "乃", "奈", "氖", "萘", "鼐", "氖"], + "ㄋㄢ": ["南", "難", "男", "喃", "楠", "赧", "囝", "囡"], + "ㄋㄤ": ["囊", "囔", "餿"], + "ㄋㄠ": ["腦", "惱", "鬧", "撓", "淖", "鐃", "橈", "鬧", "鬧"], + "ㄋㄜ": ["呢", "訥"], + "ㄋㄟ": ["內", "那", "餒"], + "ㄋㄣ": ["嫩", "恁"], + "ㄋㄥ": ["能"], + "ㄋㄧ": ["你", "妳", "呢", "泥", "尼", "擬", "逆", "妮", "霓", "倪", "匿", "溺", "膩", "旎", "昵", "妮"], + "ㄋㄧㄝ": ["捏", "聶", "孽", "躡", "鎳", "囁", "臬", "涅", "孽"], + "ㄋㄧㄢ": ["年", "念", "黏", "碾", "捻", "撚", "蔦", "念", "唸"], + "ㄋㄧㄤ": ["娘", "釀", "釀"], + "ㄋㄧㄠ": ["鳥", "尿", "裊", "嬲", "蔦", "鳥"], + "ㄋㄧㄣ": ["您"], + "ㄋㄧㄥ": ["寧", "凝", "擰", "檸", "獰", "嚀", "甯", "寧"], + "ㄋㄧㄡ": ["牛", "紐", "扭", "鈕", "妞", "拗", "妞"], + "ㄋㄨ": ["女", "努", "怒", "奴", "弩", "胬", "弩"], + "ㄋㄨㄢ": ["暖"], + "ㄋㄨㄣ": ["嫩", "恁"], + "ㄋㄨㄛ": ["挪", "諾", "懦", "糯", "喏", "懦"], + "ㄌㄚ": ["拉", "啦", "蠟", "辣", "臘", "喇", "落", "啦", "邋"], + "ㄌㄞ": ["來", "賴", "萊", "徠", "賚", "賴", "睞"], + "ㄌㄢ": ["藍", "蘭", "攔", "籃", "懶", "爛", "濫", "覽", "欄", "瀾", "嵐", "襤", "懶", "讕"], + "ㄌㄤ": ["浪", "郎", "狼", "廊", "朗", "琅", "螂", "朗", "郎", "閬"], + "ㄌㄠ": ["老", "勞", "落", "牢", "撈", "澇", "絡", "姥", "佬", "潦", "澇", "癆"], + "ㄌㄜ": ["了", "樂", "勒", "肋", "勒", "肋"], + "ㄌㄟ": ["累", "類", "淚", "雷", "勒", "壘", "蕾", "磊", "擂", "鐳", "儡", "勒", "擂"], + "ㄌㄥ": ["冷", "愣", "楞", "冷"], + "ㄌㄧ": ["裡", "力", "理", "利", "立", "離", "例", "歷", "李", "禮", "麗", "勵", "梨", "厘", "莉", "犁", "黎", "璃", "狸", "漓", "罹", "驪", "鱧", "吏", "栗", "俐", "荔", "痢", "裡", "裏", "裡", "吏", "戾", "蠡", "蜊", "悝", "喱"], + "ㄌㄧㄚ": ["倆"], + "ㄌㄧㄝ": ["列", "烈", "獵", "裂", "劣", "咧", "冽", "捩", "躐", "冽", "洌"], + "ㄌㄧㄢ": ["連", "聯", "臉", "練", "蓮", "戀", "煉", "廉", "憐", "漣", "鐮", "斂", "璉", "斂", "斂"], + "ㄌㄧㄤ": ["兩", "亮", "量", "良", "涼", "梁", "糧", "樑", "諒", "晾", "踉", "靚", "倆", "倆", "粱", "量"], + "ㄌㄧㄠ": ["了", "料", "聊", "療", "遼", "撩", "僚", "燎", "繚", "潦", "寥", "嘹", "撩", "鐐", "獠"], + "ㄌㄧㄝ": ["列", "烈", "獵", "裂", "劣", "咧", "冽", "捩", "躐", "獵", "獵"], + "ㄌㄧㄣ": ["林", "臨", "鄰", "淋", "琳", "霖", "鱗", "麟", "遴", "藺", "吝", "躪", "琳", "淋"], + "ㄌㄧㄥ": ["領", "零", "靈", "令", "另", "玲", "鈴", "陵", "嶺", "凌", "菱", "羚", "翎", "聆", "伶", "拎", "凌", "鈴", "鈴"], + "ㄌㄧㄡ": ["六", "流", "留", "劉", "柳", "溜", "琉", "榴", "硫", "鎏", "鷚", "溜", "溜", "鎦"], + "ㄌㄨ": ["路", "錄", "陸", "綠", "露", "旅", "律", "慮", "呂", "履", "侶", "屢", "濾", "氯", "廬", "爐", "蘆", "盧", "顱", "魯", "擼", "祿", "麓", "碌", "陸", "輅", "輅"], + "ㄌㄨㄢ": ["亂", "卵", "巒", "鑾", "鸞", "欒", "鸞", "鑾"], + "ㄌㄨㄣ": ["論", "輪", "倫", "侖", "綸", "淪", "論", "論"], + "ㄌㄨㄛ": ["落", "羅", "洛", "絡", "邏", "鑼", "籮", "駱", "裸", "螺", "蘿", "摞", "囉", "羅", "邏"], + "ㄍㄚ": ["嘎", "噶", "軋", "噶"], + "ㄍㄞ": ["改", "該", "蓋", "概", "溉", "丐", "芥", "鈣", "蓋", "蓋"], + "ㄍㄢ": ["幹", "感", "敢", "甘", "肝", "趕", "桿", "乾", "贛", "柑", "竿", "尴", "擀", "乾", "乾"], + "ㄍㄤ": ["剛", "鋼", "港", "崗", "綱", "岡", "缸", "槓", "扛", "剛", "崗"], + "ㄍㄠ": ["高", "告", "搞", "稿", "糕", "鎬", "膏", "篙", "稿", "稿"], + "ㄍㄜ": ["個", "各", "歌", "格", "哥", "割", "革", "隔", "閣", "葛", "戈", "擱", "鴿", "胳", "骼", "個", "個"], + "ㄍㄟ": ["給"], + "ㄍㄣ": ["跟", "根", "亙", "艮", "跟"], + "ㄍㄥ": ["更", "耕", "庚", "羹", "耿", "梗", "更", "耕"], + "ㄍㄨ": ["古", "故", "顧", "骨", "谷", "股", "鼓", "固", "孤", "姑", "辜", "沽", "咕", "估", "谷", "谷"], + "ㄍㄨㄚ": ["掛", "瓜", "刮", "寡", "呱", "褂", "掛", "掛"], + "ㄍㄨㄞ": ["怪", "乖", "拐", "乖"], + "ㄍㄨㄢ": ["關", "觀", "管", "官", "館", "慣", "灌", "冠", "罐", "貫", "棺", "倌", "觀", "關"], + "ㄍㄨㄤ": ["光", "廣", "逛", "胱", "光", "光"], + "ㄍㄨㄟ": ["貴", "規", "歸", "鬼", "軌", "櫃", "桂", "跪", "龜", "瑰", "詭", "閨", "圭", "桂", "歸"], + "ㄍㄨㄣ": ["滾", "棍", "滾"], + "ㄍㄨㄛ": ["過", "國", "果", "鍋", "郭", "裹", "渦", "過", "過"], + "ㄎㄚ": ["卡", "咖", "喀", "咔", "卡"], + "ㄎㄞ": ["開", "凱", "楷", "慨", "愷", "鎧", "鍇", "開", "凱"], + "ㄎㄢ": ["看", "砍", "坎", "勘", "刊", "堪", "瞰", "龕", "看", "看"], + "ㄎㄤ": ["康", "抗", "扛", "亢", "糠", "慷", "伉", "康", "康"], + "ㄎㄠ": ["考", "靠", "烤", "拷", "栲", "犒", "考", "考"], + "ㄎㄜ": ["可", "客", "科", "刻", "課", "顆", "克", "渴", "柯", "棵", "磕", "咳", "殼", "坷", "可", "可"], + "ㄎㄣ": ["肯", "懇", "啃", "齦", "肯"], + "ㄎㄥ": ["坑", "吭", "鏗", "坑"], + "ㄎㄨ": ["苦", "哭", "庫", "酷", "枯", "窟", "骷", "苦", "苦"], + "ㄎㄨㄚ": ["跨", "誇", "垮", "挎", "胯", "跨", "跨"], + "ㄎㄨㄞ": ["快", "塊", "筷", "儈", "膾", "快", "快"], + "ㄎㄨㄢ": ["寬", "款", "寬"], + "ㄎㄨㄤ": ["況", "礦", "狂", "框", "曠", "眶", "筐", "匡", "誑", "況", "況"], + "ㄎㄨㄟ": ["虧", "愧", "潰", "窺", "葵", "魁", "饋", "匱", "睽", "聵", "虧", "虧"], + "ㄎㄨㄣ": ["困", "昆", "坤", "捆", "琨", "鯤", "困", "困"], + "ㄎㄨㄛ": ["擴", "括", "闊", "廓", "擴", "擴"], + "ㄏㄚ": ["哈", "蛤", "哈"], + "ㄏㄞ": ["還", "海", "害", "孩", "嗨", "亥", "骸", "氦", "海", "海"], + "ㄏㄢ": ["漢", "寒", "汗", "喊", "韓", "旱", "憾", "悍", "翰", "涵", "酣", "憨", "漢", "漢"], + "ㄏㄤ": ["行", "航", "杭", "巷", "夯", "吭", "行", "行"], + "ㄏㄠ": ["好", "號", "豪", "毫", "浩", "耗", "郝", "蒿", "嚎", "壕", "濠", "好", "好"], + "ㄏㄜ": ["和", "合", "河", "何", "核", "賀", "喝", "赫", "褐", "鶴", "荷", "盒", "禾", "嚇", "呵", "和", "和"], + "ㄏㄟ": ["黑", "嘿", "黑"], + "ㄏㄣ": ["很", "狠", "恨", "痕", "很", "很"], + "ㄏㄥ": ["橫", "恆", "衡", "亨", "哼", "橫", "橫"], + "ㄏㄨ": ["湖", "呼", "戶", "虎", "護", "互", "忽", "胡", "壺", "狐", "糊", "弧", "蝴", "乎", "滬", "戶", "戶"], + "ㄏㄨㄚ": ["話", "花", "化", "華", "畫", "劃", "滑", "嘩", "樺", "驊", "花", "花"], + "ㄏㄨㄞ": ["壞", "懷", "槐", "徊", "壞", "壞"], + "ㄏㄨㄢ": ["還", "換", "環", "歡", "緩", "患", "喚", "幻", "煥", "桓", "宦", "渙", "瘓", "歡", "歡"], + "ㄏㄨㄤ": ["黃", "皇", "荒", "慌", "煌", "晃", "謊", "凰", "惶", "簧", "恍", "黃", "黃"], + "ㄏㄨㄟ": ["會", "回", "灰", "輝", "惠", "慧", "繪", "匯", "毀", "悔", "晦", "賄", "穢", "會", "會"], + "ㄏㄨㄣ": ["婚", "魂", "混", "渾", "昏", "葷", "餛", "婚", "婚"], + "ㄏㄨㄛ": ["活", "火", "或", "夥", "獲", "貨", "禍", "惑", "霍", "豁", "鍬", "鑊", "活", "活"], + "ㄐㄧ": ["幾", "機", "己", "記", "計", "集", "基", "際", "極", "擊", "激", "其", "及", "級", "即", "急", "季", "跡", "技", "績", "輯", "籍", "擠", "吉", "雞", "奇", "肌", "饑", "譏", "磯", "姬", "嫉", "棘", "寂", "冀", "驥", "己", "己"], + "ㄐㄧㄚ": ["家", "加", "價", "假", "架", "佳", "甲", "駕", "嘉", "稼", "嫁", "夾", "頰", "戛", "枷", "家", "家"], + "ㄐㄧㄢ": ["見", "間", "建", "件", "簡", "檢", "堅", "健", "漸", "劍", "鍵", "尖", "肩", "艦", "鑒", "剪", "撿", "踐", "賤", "箭", "澗", "濺", "薦", "餞", "諫", "見", "見"], + "ㄐㄧㄤ": ["將", "江", "強", "講", "降", "獎", "疆", "匠", "蔣", "漿", "僵", "薑", "絳", "將", "將"], + "ㄐㄧㄠ": ["叫", "教", "腳", "角", "交", "覺", "較", "焦", "膠", "驕", "澆", "攪", "椒", "嬌", "郊", "蕉", "矯", "絞", "僥", "佼", "叫", "叫"], + "ㄐㄧㄝ": ["接", "節", "街", "結", "解", "姐", "介", "界", "借", "傑", "潔", "截", "揭", "劫", "捷", "睫", "竭", "桔", "戒", "芥", "藉", "拮", "接", "接"], + "ㄐㄧㄣ": ["進", "金", "近", "今", "緊", "盡", "僅", "勁", "錦", "津", "筋", "巾", "斤", "禁", "襟", "瑾", "進", "進"], + "ㄐㄧㄥ": ["經", "精", "景", "警", "靜", "境", "競", "淨", "鏡", "徑", "驚", "京", "晶", "睛", "莖", "荊", "兢", "涇", "憬", "經", "經"], + "ㄐㄧㄡ": ["就", "九", "久", "酒", "舊", "救", "究", "糾", "舅", "揪", "韭", "灸", "玖", "臼", "就", "就"], + "ㄐㄩ": ["句", "具", "據", "局", "舉", "巨", "聚", "居", "距", "懼", "劇", "鋸", "矩", "拒", "俱", "菊", "橘", "颶", "踞", "遽", "句", "句"], + "ㄐㄩㄢ": ["卷", "捐", "圈", "眷", "倦", "娟", "雋", "涓", "鐫", "卷", "卷"], + "ㄐㄩㄝ": ["決", "覺", "絕", "角", "爵", "掘", "倔", "厥", "譎", "獗", "矍", "嚼", "決", "決"], + "ㄐㄩㄣ": ["軍", "君", "均", "俊", "菌", "竣", "鈞", "峻", "雋", "軍", "軍"], + "ㄑㄧ": ["起", "其", "氣", "期", "七", "奇", "妻", "棋", "齊", "旗", "企", "啟", "器", "棄", "汽", "祈", "騎", "豈", "漆", "契", "砌", "琪", "淇", "岐", "祁", "崎", "祺", "臍", "訖", "磧", "起", "起"], + "ㄑㄧㄚ": ["恰", "洽", "卡", "掐", "髂", "袷", "恰", "恰"], + "ㄑㄧㄢ": ["前", "錢", "千", "簽", "遷", "淺", "欠", "牽", "潛", "鉛", "謙", "乾", "嵌", "譴", "倩", "槍", "嗆", "薔", "牆", "強", "搶", "腔", "羌", "嬙", "檣", "鏘", "鏹", "前", "前"], + "ㄑㄧㄠ": ["橋", "瞧", "巧", "敲", "俏", "殼", "竅", "喬", "翹", "峭", "撬", "憔", "譙", "樵", "橋", "橋"], + "ㄑㄧㄝ": ["切", "且", "茄", "怯", "竊", "妾", "愜", "鍥", "伽", "切", "切"], + "ㄑㄧㄣ": ["親", "琴", "勤", "侵", "秦", "欽", "禽", "寢", "沁", "芹", "擒", "噙", "覃", "親", "親"], + "ㄑㄧㄥ": ["情", "請", "清", "青", "輕", "慶", "傾", "頃", "晴", "擎", "卿", "氫", "罄", "磬", "蜻", "鯖", "綮", "情", "情"], + "ㄑㄩ": ["去", "取", "曲", "區", "趣", "娶", "渠", "屈", "驅", "蛆", "軀", "祛", "瞿", "蛐", "麴", "衢", "去", "去"], + "ㄑㄩㄢ": ["全", "權", "圈", "泉", "拳", "犬", "勸", "券", "詮", "痊", "銓", "蜷", "顴", "全", "全"], + "ㄑㄩㄝ": ["確", "卻", "缺", "雀", "鵲", "闕", "瘸", "榷", "愨", "確", "確"], + "ㄑㄩㄣ": ["群", "裙", "逡", "群", "群"], + "ㄒㄧ": ["西", "系", "息", "希", "席", "習", "細", "喜", "戲", "洗", "惜", "稀", "溪", "錫", "析", "膝", "襲", "昔", "熙", "夕", "兮", "悉", "熄", "嬉", "汐", "犀", "烯", "曦", "奚", "唏", "淅", "嘻", "樨", "蠡", "璽", "徙", "隙", "餼", "覡", "西", "西"], + "ㄒㄧㄚ": ["下", "夏", "嚇", "廈", "峽", "蝦", "瞎", "霞", "轄", "俠", "暇", "遐", "瑕", "匣", "黠", "硤", "罅", "下", "下"], + "ㄒㄧㄢ": ["先", "現", "線", "限", "縣", "顯", "險", "鮮", "獻", "賢", "閒", "仙", "鹹", "羨", "陷", "憲", "餡", "掀", "纖", "閑", "涎", "嫻", "銜", "冼", "燹", "蜆", "筧", "薟", "躚", "先", "先"], + "ㄒㄧㄤ": ["想", "向", "相", "鄉", "香", "響", "享", "像", "象", "項", "巷", "降", "箱", "祥", "湘", "詳", "翔", "襄", "鑲", "廂", "驤", "薌", "餉", "緗", "嚮", "想", "想"], + "ㄒㄧㄠ": ["小", "笑", "效", "消", "校", "銷", "曉", "蕭", "肖", "削", "孝", "宵", "硝", "霄", "淆", "嘯", "驍", "梟", "瀟", "簫", "筱", "嘵", "蟰", "小", "小"], + "ㄒㄧㄝ": ["些", "寫", "謝", "協", "鞋", "血", "歇", "斜", "脅", "諧", "攜", "洩", "卸", "懈", "蟹", "邪", "械", "屑", "偕", "褻", "榭", "廨", "瀣", "薤", "躞", "頡", "擷", "些", "些"], + "ㄒㄧㄣ": ["新", "心", "信", "辛", "欣", "薪", "馨", "鑫", "芯", "鋅", "昕", "忻", "歆", "鐔", "囟", "新", "新"], + "ㄒㄧㄥ": ["行", "星", "形", "性", "姓", "興", "刑", "型", "幸", "杏", "腥", "猩", "邢", "悻", "滎", "餳", "行", "行"], + "ㄒㄩ": ["須", "需", "許", "續", "序", "徐", "虛", "緒", "蓄", "敘", "旭", "恤", "墟", "絮", "婿", "栩", "戌", "詡", "洫", "溆", "酗", "糈", "勖", "昫", "盱", "蓿", "須", "須"], + "ㄒㄩㄢ": ["選", "宣", "懸", "旋", "玄", "軒", "喧", "炫", "渲", "萱", "漩", "璇", "癬", "煊", "諼", "鋗", "選", "選"], + "ㄒㄩㄝ": ["學", "雪", "血", "穴", "謔", "噱", "鱈", "學", "學"], + "ㄒㄩㄣ": ["訊", "迅", "尋", "巡", "訓", "詢", "循", "旬", "熏", "勳", "薰", "潯", "馴", "汛", "遜", "殉", "徇", "巽", "塤", "曛", "窯", "鱘", "訊", "訊"], + "ㄓㄚ": ["炸", "紮", "查", "渣", "扎", "眨", "柵", "詐", "乍", "榨", "吒", "砟", "蚱", "齇", "鮓", "醡", "炸", "炸"], + "ㄓㄞ": ["債", "寨", "齋", "摘", "窄", "翟", "瘵", "齋", "齋"], + "ㄓㄢ": ["站", "展", "戰", "佔", "斬", "瞻", "沾", "詹", "盞", "嶄", "湛", "綻", "輾", "搌", "旃", "站", "站"], + "ㄓㄤ": ["長", "張", "章", "掌", "丈", "帳", "仗", "脹", "障", "彰", "漳", "璋", "嶂", "幛", "瘴", "鄣", "張", "張"], + "ㄓㄠ": ["找", "照", "招", "朝", "趙", "兆", "罩", "肇", "詔", "沼", "爪", "召", "昭", "嘲", "濯", "櫂", "笊", "招", "招"], + "ㄓㄜ": ["這", "著", "者", "折", "哲", "蔗", "遮", "轍", "浙", "褶", "蟄", "鷓", "謫", "輒", "晢", "蜇", "這", "這"], + "ㄓㄣ": ["真", "針", "鎮", "陣", "珍", "震", "振", "診", "枕", "斟", "甄", "臻", "疹", "砧", "貞", "偵", "軫", "縝", "榛", "楨", "賑", "禎", "畛", "圳", "蓁", "真", "真"], + "ㄓㄥ": ["正", "政", "整", "爭", "證", "鄭", "征", "蒸", "掙", "睜", "錚", "崢", "箏", "怔", "拯", "鉦", "幀", "諍", "癥", "正", "正"], + "ㄓㄨ": ["主", "住", "注", "著", "助", "築", "逐", "祝", "豬", "珠", "朱", "諸", "竹", "株", "燭", "矚", "駐", "鑄", "煮", "拄", "囑", "佇", "杼", "渚", "瀦", "躅", "櫫", "褚", "苧", "洙", "麈", "瘃", "主", "主"], + "ㄓㄨㄚ": ["抓", "爪", "抓"], + "ㄓㄨㄞ": ["轉", "拽", "轉"], + "ㄓㄨㄢ": ["專", "轉", "傳", "賺", "磚", "撰", "篆", "饌", "顓", "專", "專"], + "ㄓㄨㄤ": ["裝", "狀", "莊", "撞", "壯", "幢", "妝", "樁", "裝", "裝"], + "ㄓㄨㄟ": ["追", "墜", "綴", "贅", "縋", "惴", "騅", "追", "追"], + "ㄓㄨㄣ": ["準", "諄", "肫", "窀", "準", "準"], + "ㄓㄨㄛ": ["著", "桌", "捉", "卓", "濁", "灼", "酌", "拙", "琢", "茁", "擢", "倬", "涿", "浞", "禚", "斫", "桌", "桌"], + "ㄔㄚ": ["查", "茶", "差", "插", "察", "剎", "叉", "岔", "詫", "差", "差"], + "ㄔㄞ": ["差", "拆", "柴", "豺", "差"], + "ㄔㄢ": ["產", "纏", "禪", "蟬", "鏟", "闡", "顫", "摻", "潺", "產", "產"], + "ㄔㄤ": ["長", "常", "場", "唱", "廠", "昌", "倡", "嘗", "腸", "暢", "償", "長", "長"], + "ㄔㄠ": ["超", "朝", "潮", "吵", "炒", "抄", "鈔", "巢", "嘲", "超", "超"], + "ㄔㄜ": ["車", "徹", "撤", "扯", "澈", "車", "車"], + "ㄔㄣ": ["陳", "晨", "沉", "趁", "襯", "臣", "塵", "辰", "忱", "陳", "陳"], + "ㄔㄥ": ["成", "城", "程", "稱", "承", "誠", "乘", "撐", "橙", "呈", "懲", "成", "成"], + "ㄔㄨ": ["出", "處", "初", "除", "書", "楚", "觸", "儲", "廚", "畜", "鋤", "出", "出"], + "ㄔㄨㄞ": ["揣", "踹", "揣"], + "ㄔㄨㄢ": ["傳", "穿", "船", "川", "串", "喘", "釧", "傳", "傳"], + "ㄔㄨㄤ": ["床", "窗", "創", "闖", "幢", "床", "床"], + "ㄔㄨㄟ": ["吹", "垂", "錘", "捶", "炊", "吹", "吹"], + "ㄔㄨㄣ": ["春", "純", "唇", "淳", "醇", "春", "春"], + "ㄔㄨㄛ": ["戳", "綽", "輟", "齪", "戳"], + "ㄕㄚ": ["殺", "沙", "紗", "傻", "啥", "煞", "莎", "杉", "剎", "砂", "痧", "裟", "鎩", "霎", "殺", "殺"], + "ㄕㄞ": ["曬", "篩", "色", "曬", "曬"], + "ㄕㄢ": ["山", "善", "閃", "衫", "扇", "杉", "刪", "珊", "柵", "膳", "擅", "贍", "汕", "潸", "姍", "煽", "跚", "訕", "疝", "鱔", "山", "山"], + "ㄕㄤ": ["上", "商", "傷", "尚", "賞", "裳", "熵", "觴", "殤", "垧", "上", "上"], + "ㄕㄠ": ["少", "燒", "紹", "稍", "勺", "哨", "韶", "捎", "梢", "芍", "苕", "蛸", "筲", "少", "少"], + "ㄕㄜ": ["社", "設", "射", "蛇", "舌", "捨", "涉", "赦", "攝", "奢", "賒", "麝", "懾", "灄", "社", "社"], + "ㄕㄣ": ["身", "深", "神", "什", "申", "伸", "審", "慎", "腎", "滲", "沈", "參", "甚", "嬸", "砷", "莘", "哂", "瀋", "糝", "身", "身"], + "ㄕㄥ": ["生", "聲", "勝", "升", "省", "聖", "盛", "剩", "繩", "笙", "甥", "晟", "生", "生"], + "ㄕㄨ": ["書", "數", "樹", "輸", "術", "述", "叔", "屬", "暑", "署", "鼠", "束", "疏", "舒", "淑", "梳", "抒", "殊", "蔬", "孰", "贖", "熟", "恕", "庶", "墅", "俞", "澍", "紓", "倏", "毹", "書", "書"], + "ㄕㄨㄚ": ["刷", "耍", "唰", "刷", "刷"], + "ㄕㄨㄞ": ["帥", "率", "摔", "甩", "蟀", "帥", "帥"], + "ㄕㄨㄢ": ["栓", "拴", "閂", "涮", "栓", "栓"], + "ㄕㄨㄤ": ["雙", "爽", "霜", "孀", "雙", "雙"], + "ㄕㄨㄟ": ["水", "說", "稅", "睡", "誰", "水", "水"], + "ㄕㄨㄣ": ["順", "瞬", "舜", "吮", "順", "順"], + "ㄕㄨㄛ": ["說", "數", "碩", "朔", "爍", "鑠", "蒴", "搠", "說", "說"], + "ㄖㄢ": ["然", "燃", "染", "冉", "髯", "蚺", "然", "然"], + "ㄖㄤ": ["讓", "嚷", "壤", "攘", "穰", "瓤", "讓", "讓"], + "ㄖㄠ": ["擾", "繞", "饒", "嬈", "橈", "蕘", "擾", "擾"], + "ㄖㄜ": ["熱", "惹", "喏", "熱", "熱"], + "ㄖㄣ": ["人", "認", "任", "仁", "忍", "刃", "韌", "紉", "妊", "葚", "稔", "人", "人"], + "ㄖㄥ": ["仍", "扔", "仍", "仍"], + "ㄖㄨ": ["如", "入", "儒", "乳", "辱", "孺", "茹", "蠕", "嚅", "濡", "縟", "洳", "如", "如"], + "ㄖㄨㄢ": ["軟", "阮", "軟", "軟"], + "ㄖㄨㄟ": ["瑞", "銳", "蕊", "芮", "蚋", "枘", "瑞", "瑞"], + "ㄖㄨㄣ": ["潤", "閏", "潤", "潤"], + "ㄖㄨㄛ": ["若", "弱", "偌", "箬", "蒻", "若", "若"], + "ㄗㄚ": ["雜", "砸", "咂", "拶", "雜", "雜"], + "ㄗㄞ": ["在", "再", "載", "災", "宰", "栽", "崽", "哉", "在", "在"], + "ㄗㄢ": ["咱", "讚", "暫", "拶", "昝", "簪", "糌", "咱", "咱"], + "ㄗㄤ": ["藏", "臟", "葬", "臧", "奘", "駔", "臟", "臟"], + "ㄗㄠ": ["早", "造", "遭", "燥", "澡", "藻", "棗", "躁", "鑿", "蚤", "皁", "竈", "早", "早"], + "ㄗㄜ": ["則", "責", "擇", "澤", "側", "仄", "迮", "幘", "賾", "箦", "則", "則"], + "ㄗㄟ": ["賊", "賊", "賊"], + "ㄗㄣ": ["怎", "譖", "怎", "怎"], + "ㄗㄥ": ["增", "贈", "憎", "甑", "繒", "罾", "增", "增"], + "ㄗㄨ": ["租", "族", "組", "阻", "卒", "俎", "詛", "菹", "祖", "祖"], + "ㄗㄨㄢ": ["鑽", "纂", "攢", "繵", "躜", "鑽", "鑽"], + "ㄗㄨㄟ": ["最", "罪", "嘴", "醉", "蕞", "最", "最"], + "ㄗㄨㄣ": ["尊", "遵", "樽", "撙", "尊", "尊"], + "ㄗㄨㄛ": ["做", "作", "座", "左", "昨", "佐", "琢", "撮", "唑", "嘬", "怍", "祚", "胙", "做", "做"], + "ㄘㄚ": ["擦", "嚓", "擦", "擦"], + "ㄘㄞ": ["才", "材", "才", "財", "采", "彩", "菜", "猜", "裁", "踩", "才", "才"], + "ㄘㄢ": ["參", "餐", "殘", "慘", "燦", "蠶", "參", "參"], + "ㄘㄤ": ["藏", "倉", "蒼", "艙", "藏", "藏"], + "ㄘㄠ": ["草", "操", "曹", "糙", "槽", "草", "草"], + "ㄘㄜ": ["策", "測", "側", "廁", "冊", "策", "策"], + "ㄘㄥ": ["層", "曾", "蹭", "層", "層"], + "ㄘㄨ": ["粗", "促", "醋", "簇", "猝", "粗", "粗"], + "ㄘㄨㄢ": ["竄", "攢", "篡", "竄", "竄"], + "ㄘㄨㄟ": ["催", "脆", "翠", "粹", "崔", "淬", "萃", "催", "催"], + "ㄘㄨㄣ": ["村", "存", "寸", "磋", "村", "村"], + "ㄘㄨㄛ": ["錯", "措", "搓", "磋", "挫", "錯", "錯"], + "ㄙㄚ": ["撒", "灑", "薩", "卅", "颯", "撒", "撒"], + "ㄙㄞ": ["賽", "塞", "腮", "鰓", "噻", "賽", "賽"], + "ㄙㄢ": ["三", "散", "傘", "參", "霰", "三", "三"], + "ㄙㄤ": ["喪", "桑", "嗓", "顙", "搡", "喪", "喪"], + "ㄙㄠ": ["掃", "嫂", "騷", "搔", "瘙", "繅", "掃", "掃"], + "ㄙㄜ": ["色", "塞", "瑟", "澀", "嗇", "穡", "色", "色"], + "ㄙㄣ": ["森", "森", "森"], + "ㄙㄥ": ["僧", "僧", "僧"], + "ㄙㄨ": ["速", "素", "蘇", "訴", "俗", "塑", "溯", "宿", "粟", "夙", "簌", "愫", "嗉", "謖", "速", "速"], + "ㄙㄨㄢ": ["算", "酸", "蒜", "狻", "算", "算"], + "ㄙㄨㄟ": ["隨", "歲", "雖", "碎", "遂", "穗", "隧", "髓", "祟", "綏", "邃", "燧", "謁", "隨", "隨"], + "ㄙㄨㄣ": ["損", "孫", "筍", "遜", "榫", "蓀", "猻", "損", "損"], + "ㄙㄨㄛ": ["所", "鎖", "索", "縮", "瑣", "嗦", "唆", "梭", "嗩", "娑", "蓑", "所", "所"], + "ㄧㄚ": ["呀", "壓", "牙", "亞", "雅", "鴨", "押", "芽", "涯", "訝", "崖", "啞", "衙", "軋", "蚜", "睚", "痖", "呀", "呀"], + "ㄧㄞ": ["涯", "崖", "睚", "涯"], + "ㄧㄢ": ["言", "研", "眼", "嚴", "演", "驗", "煙", "顏", "鹽", "延", "沿", "燕", "宴", "炎", "掩", "衍", "岩", "艷", "雁", "焰", "厭", "彥", "諺", "堰", "硯", "嫣", "閻", "焉", "淹", "偃", "儼", "兗", "讌", "讞", "筵", "蜓", "鼴", "罨", "剡", "鄢", "閆", "滟", "妍", "琰", "罳", "言", "言"], + "ㄧㄤ": ["樣", "陽", "洋", "養", "央", "揚", "羊", "氧", "仰", "癢", "漾", "殃", "秧", "恙", "颺", "煬", "佯", "瘍", "鞅", "樣", "樣"], + "ㄧㄠ": ["要", "藥", "搖", "遙", "腰", "邀", "耀", "瑤", "姚", "咬", "堯", "鑰", "謠", "夭", "妖", "窯", "杳", "舀", "徭", "珧", "軺", "銚", "鰩", "么", "瘧", "要", "要"], + "ㄧㄝ": ["也", "業", "夜", "葉", "爺", "野", "液", "謁", "頁", "邪", "掖", "曳", "腋", "噎", "鄴", "曄", "燁", "鐺", "也", "也"], + "ㄧㄣ": ["因", "音", "引", "銀", "印", "飲", "隱", "陰", "吟", "尹", "殷", "茵", "蔭", "垠", "夤", "齦", "湮", "氤", "胤", "鄞", "喑", "洇", "狺", "因", "因"], + "ㄧㄥ": ["應", "英", "營", "迎", "影", "贏", "硬", "映", "盈", "穎", "瑩", "鷹", "嬰", "櫻", "瀛", "蠅", "嬴", "罌", "縈", "楹", "熒", "螢", "瀅", "瓔", "鸚", "膺", "瀠", "應", "應"], + "ㄨㄚ": ["挖", "哇", "蛙", "瓦", "娃", "襪", "凹", "媧", "佤", "腽", "挖", "挖"], + "ㄨㄞ": ["外", "歪", "崴", "外", "外"], + "ㄨㄢ": ["完", "晚", "玩", "碗", "彎", "灣", "丸", "婉", "腕", "惋", "宛", "蜿", "豌", "莞", "綰", "剜", "完", "完"], + "ㄨㄤ": ["王", "往", "忘", "亡", "望", "網", "旺", "汪", "妄", "罔", "惘", "輞", "尪", "王", "王"], + "ㄨㄟ": ["為", "位", "未", "委", "圍", "唯", "威", "偉", "危", "尾", "微", "維", "違", "胃", "餵", "味", "慰", "魏", "衛", "畏", "萎", "偽", "娓", "惟", "巍", "緯", "煒", "韋", "薇", "帷", "渭", "猬", "闈", "洧", "沩", "為", "為"], + "ㄨㄣ": ["問", "文", "聞", "溫", "穩", "紋", "吻", "蚊", "雯", "紊", "刎", "璺", "問", "問"], + "ㄨㄥ": ["翁", "嗡", "甕", "蓊", "翁", "翁"], + "ㄩㄢ": ["元", "原", "員", "圓", "院", "源", "遠", "願", "緣", "園", "怨", "冤", "援", "袁", "淵", "猿", "轅", "媛", "垣", "沅", "塬", "圜", "鴛", "鳶", "螈", "爰", "瑗", "掾", "元", "元"], + "ㄩㄝ": ["月", "約", "越", "樂", "曰", "閱", "躍", "悅", "岳", "粵", "鑰", "櫟", "鉞", "瀹", "龠", "刖", "軏", "月", "月"], + "ㄩㄣ": ["雲", "運", "員", "韻", "勻", "允", "孕", "蘊", "暈", "隕", "耘", "紜", "慍", "殞", "惲", "醞", "狁", "鄖", "雲", "雲"], + "ㄦ": ["二", "兒", "耳", "而", "爾", "餌", "洱", "貳", "兒", "兒"] + } +} diff --git a/CustomKeyboard/Resource/kb_keyboard_layout_config.json b/CustomKeyboard/Resource/kb_keyboard_layout_config.json index 5cbab84..85d0c37 100644 --- a/CustomKeyboard/Resource/kb_keyboard_layout_config.json +++ b/CustomKeyboard/Resource/kb_keyboard_layout_config.json @@ -411,7 +411,7 @@ ] }, "letters_azerty": { - "__comment": "AZERTY 布局(法语/西班牙语)", + "__comment": "AZERTY 布局(法语)- 下个版本启用", "rows": [ { "__comment": "第一行 azertyuiop", @@ -466,7 +466,7 @@ ] }, "letters_qwertz": { - "__comment": "QWERTZ 布局(德语/西班牙语)", + "__comment": "QWERTZ 布局(德语)- 下个版本启用", "rows": [ { "__comment": "第一行 qwertzuiop", @@ -521,32 +521,33 @@ ] }, "letters_bopomofo_full": { - "__comment": "繁体注音全键盘布局", + "__comment": "繁体注音全键盘布局(参考 iOS 系统注音键盘)", + "__comment_symbols": "声母:ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙ 韵母:ㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ 声调:ˊˇˋ˙", "rows": [ { - "__comment": "第一行注音符号", + "__comment": "第一行:声调 + 韵母", "align": "left", "insetLeft": 4, "insetRight": 4, "gap": 5, "items": [ - "letter:ㄅ", "letter:ㄉ", "letter:ˇ", "letter:ˋ", "letter:ㄓ", - "letter:ˊ", "letter:˙", "letter:ㄚ", "letter:ㄞ", "letter:ㄢ" + "letter:ˊ", "letter:ˇ", "letter:ˋ", "letter:˙", "letter:ㄚ", + "letter:ㄛ", "letter:ㄜ", "letter:ㄝ", "letter:ㄞ", "letter:ㄟ" ] }, { - "__comment": "第二行注音符号", + "__comment": "第二行:声母 + 韵母", "align": "center", "insetLeft": 0, "insetRight": 0, "gap": 5, "items": [ - "letter:ㄆ", "letter:ㄊ", "letter:ㄍ", "letter:ㄐ", "letter:ㄔ", - "letter:ㄗ", "letter:ㄧ", "letter:ㄛ", "letter:ㄟ", "letter:ㄣ" + "letter:ㄅ", "letter:ㄆ", "letter:ㄇ", "letter:ㄈ", "letter:ㄉ", + "letter:ㄊ", "letter:ㄋ", "letter:ㄌ", "letter:ㄍ" ] }, { - "__comment": "第三行:shift + 注音符号 + backspace", + "__comment": "第三行:声母 + 韵母", "align": "left", "insetLeft": 4, "insetRight": 4, @@ -556,7 +557,7 @@ { "id": "shift", "width": "controlWidth" } ], "center": [ - "letter:ㄇ", "letter:ㄋ", "letter:ㄎ", "letter:ㄑ", "letter:ㄕ", "letter:ㄘ", "letter:ㄨ" + "letter:ㄎ", "letter:ㄏ", "letter:ㄐ", "letter:ㄑ", "letter:ㄒ", "letter:ㄓ", "letter:ㄔ", "letter:ㄕ" ], "right": [ { "id": "backspace", "width": "controlWidth" } @@ -564,22 +565,34 @@ } }, { - "__comment": "第四行:123/emoji/space/send", + "__comment": "第四行:声母 + 韵母", "align": "left", "insetLeft": 4, "insetRight": 4, "gap": 5, "items": [ - "mode_123", "emoji", "space", "send" + "letter:ㄖ", "letter:ㄗ", "letter:ㄘ", "letter:ㄙ", "letter:ㄧ", + "letter:ㄨ", "letter:ㄩ", "letter:ㄠ", "letter:ㄡ", "letter:ㄢ" + ] + }, + { + "__comment": "第五行:韵母 + 控制键", + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:ㄣ", "letter:ㄤ", "letter:ㄥ", "letter:ㄦ", "mode_123", "emoji", "space", "send" ] } ] }, "letters_bopomofo_standard": { - "__comment": "繁体注音标准布局", + "__comment": "繁体注音标准布局(传统排列方式)", + "__comment_symbols": "声母:ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙ 韵母:ㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ 声调:ˊˇˋ˙", "rows": [ { - "__comment": "第一行注音符号", + "__comment": "第一行:声母", "align": "left", "insetLeft": 4, "insetRight": 4, @@ -590,18 +603,18 @@ ] }, { - "__comment": "第二行注音符号", + "__comment": "第二行:声母", "align": "center", "insetLeft": 0, "insetRight": 0, "gap": 5, "items": [ "letter:ㄏ", "letter:ㄐ", "letter:ㄑ", "letter:ㄒ", "letter:ㄓ", - "letter:ㄔ", "letter:ㄕ", "letter:ㄖ", "letter:ㄗ" + "letter:ㄔ", "letter:ㄕ", "letter:ㄖ", "letter:ㄗ", "letter:ㄘ" ] }, { - "__comment": "第三行:shift + 注音符号 + backspace", + "__comment": "第三行:声母 + 韵母", "align": "left", "insetLeft": 4, "insetRight": 4, @@ -611,7 +624,7 @@ { "id": "shift", "width": "controlWidth" } ], "center": [ - "letter:ㄘ", "letter:ㄙ", "letter:ㄧ", "letter:ㄨ", "letter:ㄩ", "letter:ㄚ", "letter:ㄛ" + "letter:ㄙ", "letter:ㄧ", "letter:ㄨ", "letter:ㄩ", "letter:ㄚ", "letter:ㄛ", "letter:ㄜ", "letter:ㄝ" ], "right": [ { "id": "backspace", "width": "controlWidth" } @@ -619,13 +632,24 @@ } }, { - "__comment": "第四行:123/emoji/space/send", + "__comment": "第四行:韵母 + 声调", "align": "left", "insetLeft": 4, "insetRight": 4, "gap": 5, "items": [ - "mode_123", "emoji", "space", "send" + "letter:ㄞ", "letter:ㄟ", "letter:ㄠ", "letter:ㄡ", "letter:ㄢ", + "letter:ㄣ", "letter:ㄤ", "letter:ㄥ", "letter:ㄦ", "letter:ˊ" + ] + }, + { + "__comment": "第五行:声调 + 控制键", + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:ˇ", "letter:ˋ", "letter:˙", "mode_123", "emoji", "space", "send" ] } ] diff --git a/CustomKeyboard/Resource/kb_keyboard_layouts_i18n.json b/CustomKeyboard/Resource/kb_keyboard_layouts_i18n.json new file mode 100644 index 0000000..33a8397 --- /dev/null +++ b/CustomKeyboard/Resource/kb_keyboard_layouts_i18n.json @@ -0,0 +1,448 @@ +{ + "__comment": "国际化键盘布局配置文件:各国语言的专用键盘布局", + "__comment_usage": "layoutJsonId 对应 kb_input_profiles.json 中的 layoutJsonId", + + "layouts": { + "letters_es": { + "__comment": "西班牙语(拉丁美洲)键盘布局", + "__comment_features": "包含 Ñ 键,支持 áéíóúü 等重音符号", + "rows": [ + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:q", "letter:w", "letter:e", "letter:r", "letter:t", + "letter:y", "letter:u", "letter:i", "letter:o", "letter:p" + ] + }, + { + "align": "center", + "insetLeft": 0, + "insetRight": 0, + "gap": 5, + "items": [ + "letter:a", "letter:s", "letter:d", "letter:f", "letter:g", + "letter:h", "letter:j", "letter:k", "letter:l", "letter:ñ" + ] + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "segments": { + "left": [ + { "id": "shift", "width": "controlWidth" } + ], + "center": [ + "letter:z", "letter:x", "letter:c", "letter:v", "letter:b", + "letter:n", "letter:m" + ], + "right": [ + { "id": "backspace", "width": "controlWidth" } + ] + } + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "mode_123", "emoji", "space", "send" + ] + } + ], + "shiftRows": [ + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:Q", "letter:W", "letter:E", "letter:R", "letter:T", + "letter:Y", "letter:U", "letter:I", "letter:O", "letter:P" + ] + }, + { + "align": "center", + "insetLeft": 0, + "insetRight": 0, + "gap": 5, + "items": [ + "letter:A", "letter:S", "letter:D", "letter:F", "letter:G", + "letter:H", "letter:J", "letter:K", "letter:L", "letter:Ñ" + ] + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "segments": { + "left": [ + { "id": "shift", "width": "controlWidth" } + ], + "center": [ + "letter:Z", "letter:X", "letter:C", "letter:V", "letter:B", + "letter:N", "letter:M" + ], + "right": [ + { "id": "backspace", "width": "controlWidth" } + ] + } + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "mode_123", "emoji", "space", "send" + ] + } + ], + "longPress": { + "a": ["á", "à", "ä", "â", "ã", "å", "æ"], + "e": ["é", "è", "ë", "ê", "ę"], + "i": ["í", "ì", "ï", "î", "ı"], + "o": ["ó", "ò", "ö", "ô", "õ", "ø", "œ"], + "u": ["ú", "ù", "ü", "û"], + "n": ["ñ", "ń", "ņ", "ň"], + "c": ["ç", "ć", "ĉ", "č"], + "d": ["ð", "đ"], + "s": ["ś", "š", "ş", "ß"], + "z": ["ź", "ż", "ž"] + } + }, + + "letters_pt": { + "__comment": "葡萄牙语键盘布局", + "__comment_features": "支持 ã, õ, ç, á, é, í, ó, ú 等重音符号", + "rows": [ + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:q", "letter:w", "letter:e", "letter:r", "letter:t", + "letter:y", "letter:u", "letter:i", "letter:o", "letter:p" + ] + }, + { + "align": "center", + "insetLeft": 0, + "insetRight": 0, + "gap": 5, + "items": [ + "letter:a", "letter:s", "letter:d", "letter:f", "letter:g", + "letter:h", "letter:j", "letter:k", "letter:l" + ] + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "segments": { + "left": [ + { "id": "shift", "width": "controlWidth" } + ], + "center": [ + "letter:z", "letter:x", "letter:c", "letter:v", "letter:b", + "letter:n", "letter:m" + ], + "right": [ + { "id": "backspace", "width": "controlWidth" } + ] + } + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "mode_123", "emoji", "space", "send" + ] + } + ], + "shiftRows": [ + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:Q", "letter:W", "letter:E", "letter:R", "letter:T", + "letter:Y", "letter:U", "letter:I", "letter:O", "letter:P" + ] + }, + { + "align": "center", + "insetLeft": 0, + "insetRight": 0, + "gap": 5, + "items": [ + "letter:A", "letter:S", "letter:D", "letter:F", "letter:G", + "letter:H", "letter:J", "letter:K", "letter:L" + ] + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "segments": { + "left": [ + { "id": "shift", "width": "controlWidth" } + ], + "center": [ + "letter:Z", "letter:X", "letter:C", "letter:V", "letter:B", + "letter:N", "letter:M" + ], + "right": [ + { "id": "backspace", "width": "controlWidth" } + ] + } + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "mode_123", "emoji", "space", "send" + ] + } + ], + "longPress": { + "a": ["á", "à", "ã", "â", "ä", "å", "æ"], + "e": ["é", "ê", "è", "ë", "ę"], + "i": ["í", "ì", "ï", "î"], + "o": ["ó", "ò", "õ", "ô", "ö", "ø", "œ"], + "u": ["ú", "ù", "ü", "û"], + "c": ["ç", "ć", "ĉ", "č"], + "n": ["ñ", "ń", "ņ", "ň"] + } + }, + + "letters_id": { + "__comment": "印尼语键盘布局", + "__comment_features": "与英文 QWERTY 相同,支持印尼语特殊字符", + "rows": [ + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:q", "letter:w", "letter:e", "letter:r", "letter:t", + "letter:y", "letter:u", "letter:i", "letter:o", "letter:p" + ] + }, + { + "align": "center", + "insetLeft": 0, + "insetRight": 0, + "gap": 5, + "items": [ + "letter:a", "letter:s", "letter:d", "letter:f", "letter:g", + "letter:h", "letter:j", "letter:k", "letter:l" + ] + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "segments": { + "left": [ + { "id": "shift", "width": "controlWidth" } + ], + "center": [ + "letter:z", "letter:x", "letter:c", "letter:v", "letter:b", + "letter:n", "letter:m" + ], + "right": [ + { "id": "backspace", "width": "controlWidth" } + ] + } + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "mode_123", "emoji", "space", "send" + ] + } + ], + "shiftRows": [ + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:Q", "letter:W", "letter:E", "letter:R", "letter:T", + "letter:Y", "letter:U", "letter:I", "letter:O", "letter:P" + ] + }, + { + "align": "center", + "insetLeft": 0, + "insetRight": 0, + "gap": 5, + "items": [ + "letter:A", "letter:S", "letter:D", "letter:F", "letter:G", + "letter:H", "letter:J", "letter:K", "letter:L" + ] + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "segments": { + "left": [ + { "id": "shift", "width": "controlWidth" } + ], + "center": [ + "letter:Z", "letter:X", "letter:C", "letter:V", "letter:B", + "letter:N", "letter:M" + ], + "right": [ + { "id": "backspace", "width": "controlWidth" } + ] + } + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "mode_123", "emoji", "space", "send" + ] + } + ], + "longPress": { + "a": ["á", "à", "ä", "â", "ã"], + "e": ["é", "è", "ë", "ê"], + "i": ["í", "ì", "ï", "î"], + "o": ["ó", "ò", "ö", "ô", "õ"], + "u": ["ú", "ù", "ü", "û"], + "c": ["ç", "ć", "č"], + "n": ["ñ", "ń", "ņ"] + } + }, + + "letters_zh_hant_pinyin": { + "__comment": "繁体中文拼音布局", + "__comment_features": "与英文 QWERTY 相同,联想输出繁体字", + "rows": [ + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:q", "letter:w", "letter:e", "letter:r", "letter:t", + "letter:y", "letter:u", "letter:i", "letter:o", "letter:p" + ] + }, + { + "align": "center", + "insetLeft": 0, + "insetRight": 0, + "gap": 5, + "items": [ + "letter:a", "letter:s", "letter:d", "letter:f", "letter:g", + "letter:h", "letter:j", "letter:k", "letter:l" + ] + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "segments": { + "left": [ + { "id": "shift", "width": "controlWidth" } + ], + "center": [ + "letter:z", "letter:x", "letter:c", "letter:v", "letter:b", + "letter:n", "letter:m" + ], + "right": [ + { "id": "backspace", "width": "controlWidth" } + ] + } + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "mode_123", "emoji", "space", "send" + ] + } + ], + "shiftRows": [ + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "letter:Q", "letter:W", "letter:E", "letter:R", "letter:T", + "letter:Y", "letter:U", "letter:I", "letter:O", "letter:P" + ] + }, + { + "align": "center", + "insetLeft": 0, + "insetRight": 0, + "gap": 5, + "items": [ + "letter:A", "letter:S", "letter:D", "letter:F", "letter:G", + "letter:H", "letter:J", "letter:K", "letter:L" + ] + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "segments": { + "left": [ + { "id": "shift", "width": "controlWidth" } + ], + "center": [ + "letter:Z", "letter:X", "letter:C", "letter:V", "letter:B", + "letter:N", "letter:M" + ], + "right": [ + { "id": "backspace", "width": "controlWidth" } + ] + } + }, + { + "align": "left", + "insetLeft": 4, + "insetRight": 4, + "gap": 5, + "items": [ + "mode_123", "emoji", "space", "send" + ] + } + ] + } + } +} diff --git a/CustomKeyboard/Resource/pinyin_to_traditional.json b/CustomKeyboard/Resource/pinyin_to_traditional.json new file mode 100644 index 0000000..a812fda --- /dev/null +++ b/CustomKeyboard/Resource/pinyin_to_traditional.json @@ -0,0 +1,405 @@ +{ + "__comment": "繁体拼音映射表:拼音 -> 繁体字候选词列表", + "mappings": { + "a": ["阿", "啊", "呀"], + "ai": ["愛", "愛", "艾", "哀", "矮", "礙", "挨", "唉"], + "an": ["安", "按", "暗", "岸", "案", "俺", "鞍"], + "ang": ["昂", "盎"], + "ao": ["奧", "傲", "熬", "澳", "襖", "懊", "敖"], + "ba": ["吧", "把", "八", "爸", "巴", "拔", "罷", "霸", "扒", "叭"], + "bai": ["白", "百", "拜", "敗", "柏", "擺", "佰"], + "ban": ["辦", "班", "般", "板", "版", "半", "伴", "扮", "拌", "瓣", "頒"], + "bang": ["幫", "邦", "榜", "膀", "綁", "棒", "磅"], + "bao": ["包", "保", "報", "寶", "抱", "暴", "爆", "薄", "爆", "豹", "飽", "堡", "刨"], + "bei": ["北", "被", "背", "備", "悲", "杯", "碑", "輩", "倍", "貝"], + "ben": ["本", "奔", "笨", "盆"], + "beng": ["崩", "繃", "蹦", "泵"], + "bi": ["比", "必", "筆", "畢", "避", "閉", "鼻", "彼", "碧", "壁", "弊", "臂", "秘", "辟", "逼"], + "bian": ["變", "便", "邊", "編", "辯", "遍", "鞭", "辨", "扁", "貶"], + "biao": ["表", "標", "彪", "錶", "鏢"], + "bie": ["別", "憋", "癟"], + "bin": ["賓", "彬", "斌", "瀕", "濱"], + "bing": ["病", "並", "冰", "兵", "餅", "柄", "秉", "稟"], + "bo": ["不", "波", "博", "播", "伯", "薄", "泊", "柏", "勃", "搏", "撥", "剝", "脖", "博"], + "bu": ["不", "步", "部", "布", "補", "捕", "簿", "卜", "怖"], + "ca": ["擦", "嚓"], + "cai": ["才", "材", "才", "財", "采", "彩", "菜", "猜", "裁", "踩"], + "can": ["參", "餐", "殘", "慘", "燦", "蠶"], + "cang": ["藏", "倉", "蒼", "艙"], + "cao": ["草", "操", "曹", "糙", "槽"], + "ce": ["策", "測", "側", "廁", "冊"], + "ceng": ["層", "曾", "蹭"], + "cha": ["查", "茶", "差", "插", "察", "剎", "叉", "岔", "詫"], + "chai": ["差", "拆", "柴", "豺"], + "chan": ["產", "纏", "禪", "蟬", "鏟", "闡", "顫", "摻", "潺"], + "chang": ["長", "常", "場", "唱", "廠", "昌", "倡", "嘗", "腸", "暢", "償"], + "chao": ["超", "朝", "潮", "吵", "炒", "抄", "鈔", "巢", "嘲"], + "che": ["車", "徹", "撤", "扯", "澈"], + "chen": ["陳", "晨", "沉", "趁", "襯", "臣", "塵", "辰", "忱"], + "cheng": ["成", "城", "程", "稱", "承", "誠", "乘", "撐", "橙", "呈", "懲", "撐"], + "chi": ["吃", "持", "遲", "池", "尺", "齒", "赤", "翅", "斥", "馳", "癡", "侈"], + "chong": ["充", "衝", "蟲", "重", "崇", "寵", "沖", "憧"], + "chou": ["抽", "愁", "醜", "臭", "仇", "籌", "稠", "綢", "酬", "疇"], + "chu": ["出", "處", "初", "除", "書", "楚", "觸", "儲", "廚", "畜", "鋤"], + "chuai": ["揣", "踹"], + "chuan": ["傳", "穿", "船", "川", "串", "喘", "釧"], + "chuang": ["床", "窗", "創", "闖", "幢"], + "chui": ["吹", "垂", "錘", "捶", "炊"], + "chun": ["春", "純", "唇", "淳", "醇"], + "ci": ["次", "此", "詞", "辭", "慈", "瓷", "磁", "賜", "刺", "茨"], + "cong": ["從", "聰", "匆", "蔥", "叢", "淙"], + "cou": ["湊"], + "cu": ["粗", "促", "醋", "簇", "猝"], + "cuan": ["竄", "攢", "篡"], + "cui": ["催", "脆", "翠", "粹", "崔", "淬", "萃"], + "cun": ["村", "存", "寸", "磋"], + "cuo": ["錯", "措", "搓", "磋", "挫"], + "da": ["大", "打", "答", "達", "搭", "塔", "瘩"], + "dai": ["大", "代", "帶", "待", "袋", "戴", "呆", "貸", "逮", "怠", "殆", "黛"], + "dan": ["但", "單", "擔", "膽", "丹", "淡", "蛋", "誕", "彈", "旦", "氮", "耽"], + "dang": ["當", "黨", "檔", "擋", "蕩", "檔", "宕"], + "dao": ["到", "道", "導", "刀", "倒", "島", "盜", "悼", "搗", "禱", "蹈"], + "de": ["的", "得", "德", "底"], + "dei": ["得"], + "deng": ["等", "燈", "登", "鄧", "瞪", "凳", "蹬"], + "di": ["的", "地", "第", "低", "底", "敵", "弟", "帝", "抵", "遞", "迪", "滴", "堤", "笛", "締"], + "dia": ["嗲"], + "dian": ["點", "電", "店", "典", "墊", "澱", "殿", "顛", "滇", "碘", "巔"], + "diao": ["調", "掉", "吊", "雕", "刁", "釣", "凋", "碉"], + "die": ["爹", "跌", "叠", "蝶", "碟", "諜", "迭", "帖", "耋"], + "ding": ["定", "訂", "頂", "丁", "釘", "盯", "叮", "鼎", "叮"], + "diu": ["丟"], + "dong": ["動", "東", "冬", "懂", "洞", "凍", "棟", "董", "咚"], + "dou": ["都", "鬥", "豆", "抖", "逗", "兜", "痘"], + "du": ["讀", "都", "度", "獨", "毒", "渡", "杜", "肚", "堵", "賭", "鍍", "督"], + "duan": ["段", "斷", "短", "鍛", "緞", "端"], + "dui": ["對", "隊", "堆", "兌", "懟"], + "dun": ["頓", "噸", "盾", "蹲", "敦", "墩", "燉", "鈍"], + "duo": ["多", "度", "奪", "躲", "朵", "墮", "舵", "跺", "惰", "哆"], + "e": ["餓", "惡", "額", "俄", "鵝", "娥", "訛", "峨", "扼", "遏", "鄂", "噩"], + "ei": ["誒"], + "en": ["恩", "摁"], + "er": ["二", "兒", "耳", "而", "爾", "餌", "洱", "貳"], + "fa": ["發", "法", "罰", "乏", "伐", "閥", "筏", "佳"], + "fan": ["反", "飯", "煩", "繁", "範", "犯", "泛", "番", "翻", "凡", "帆", "返", "販", "礬"], + "fang": ["方", "放", "房", "防", "訪", "仿", "芳", "坊", "妨", "紡", "舫"], + "fei": ["非", "飛", "費", "肥", "廢", "匪", "誹", "啡", "菲", "沸", "翡", "吠"], + "fen": ["分", "份", "粉", "奮", "憤", "紛", "芬", "墳", "焚", "氛", "糞"], + "feng": ["風", "封", "豐", "峰", "鋒", "蜂", "瘋", "逢", "縫", "鳳", "奉", "諷", "楓"], + "fo": ["佛"], + "fou": ["否", "縫"], + "fu": ["父", "夫", "付", "服", "福", "府", "負", "富", "復", "副", "婦", "撫", "附", "幅", "浮", "腐", "符", "弗", "腹", "輻", "敷", "氟", "芙", "敷"], + "ga": ["嘎", "噶", "軋"], + "gai": ["改", "該", "蓋", "概", "溉", "丐", "芥", "鈣"], + "gan": ["幹", "感", "敢", "甘", "肝", "趕", "桿", "乾", "贛", "柑", "竿", "尴", "擀"], + "gang": ["剛", "鋼", "港", "崗", "綱", "岡", "缸", "槓", "扛"], + "gao": ["高", "告", "搞", "稿", "糕", "鎬", "膏", "篙"], + "ge": ["個", "各", "歌", "格", "哥", "割", "革", "隔", "閣", "葛", "戈", "擱", "鴿", "胳", "骼"], + "gei": ["給"], + "gen": ["跟", "根", "亙", "艮"], + "geng": ["更", "耕", "庚", "羹", "耿", "梗"], + "gong": ["工", "公", "共", "供", "功", "攻", "宮", "恭", "鞏", "弓", "躬", "拱", "貢"], + "gou": ["狗", "夠", "構", "購", "溝", "鉤", "勾", "苟", "垢", "篝"], + "gu": ["古", "故", "顧", "骨", "谷", "股", "鼓", "固", "孤", "姑", "辜", "沽", "咕", "估"], + "gua": ["掛", "瓜", "刮", "寡", "呱", "褂"], + "guai": ["怪", "乖", "拐"], + "guan": ["關", "觀", "管", "官", "館", "慣", "灌", "冠", "罐", "貫", "棺", "倌"], + "guang": ["光", "廣", "逛", "胱"], + "gui": ["貴", "規", "歸", "鬼", "軌", "櫃", "桂", "跪", "龜", "瑰", "詭", "閨"], + "gun": ["滾", "棍"], + "guo": ["過", "國", "果", "鍋", "郭", "裹", "渦"], + "ha": ["哈", "蛤"], + "hai": ["還", "海", "害", "孩", "嗨", "亥", "骸", "氦"], + "han": ["漢", "寒", "汗", "喊", "韓", "旱", "憾", "悍", "翰", "涵", "酣", "憨"], + "hang": ["行", "航", "杭", "巷", "夯", "吭"], + "hao": ["好", "號", "豪", "毫", "浩", "耗", "郝", "蒿", "嚎", "壕", "濠"], + "he": ["和", "合", "河", "何", "核", "賀", "喝", "赫", "褐", "鶴", "荷", "盒", "禾", "嚇", "呵"], + "hei": ["黑", "嘿"], + "hen": ["很", "狠", "恨", "痕"], + "heng": ["橫", "恆", "衡", "亨", "哼"], + "hong": ["紅", "轟", "洪", "宏", "虹", "鴻", "烘", "弘", "訌", "泓"], + "hou": ["後", "候", "厚", "喉", "猴", "吼", "侯", "吼"], + "hu": ["湖", "呼", "戶", "虎", "護", "互", "忽", "胡", "壺", "狐", "糊", "弧", "蝴", "乎", "滬"], + "hua": ["話", "花", "化", "華", "畫", "劃", "滑", "嘩", "樺", "驊"], + "huai": ["壞", "懷", "槐", "徊"], + "huan": ["還", "換", "環", "歡", "緩", "患", "喚", "幻", "煥", "桓", "宦", "渙", "瘓"], + "huang": ["黃", "皇", "荒", "慌", "煌", "晃", "謊", "凰", "惶", "煌", "簧", "恍"], + "hui": ["會", "回", "灰", "輝", "輝", "惠", "慧", "繪", "匯", "輝", "毀", "悔", "晦", "賄", "穢"], + "hun": ["婚", "魂", "混", "渾", "昏", "葷", "餛"], + "huo": ["活", "火", "或", "夥", "獲", "貨", "禍", "惑", "霍", "豁", "鍬", "鑊"], + "ji": ["幾", "機", "己", "記", "計", "集", "基", "際", "極", "擊", "激", "其", "及", "級", "即", "急", "季", "跡", "技", "績", "輯", "籍", "擠", "吉", "雞", "奇", "肌", "饑", "譏", "磯", "姬", "嫉", "棘", "寂", "冀", "驥"], + "jia": ["家", "加", "價", "假", "架", "佳", "甲", "駕", "嘉", "稼", "嫁", "夾", "頰", "戛", "枷"], + "jian": ["見", "間", "建", "件", "簡", "檢", "堅", "健", "漸", "劍", "鍵", "尖", "肩", "艦", "鑒", "剪", "撿", "踐", "賤", "箭", "澗", "濺", "薦", "餞", "漸", "諫"], + "jiang": ["將", "江", "強", "講", "降", "獎", "疆", "匠", "蔣", "漿", "僵", "薑", "絳"], + "jiao": ["叫", "教", "腳", "角", "交", "覺", "較", "焦", "膠", "驕", "澆", "攪", "椒", "嬌", "郊", "蕉", "矯", "絞", "僥", "佼", "僥"], + "jie": ["接", "節", "街", "結", "解", "姐", "介", "界", "借", "傑", "潔", "截", "揭", "劫", "捷", "睫", "竭", "桔", "戒", "芥", "藉", "拮"], + "jin": ["進", "金", "近", "今", "緊", "盡", "僅", "勁", "錦", "津", "筋", "巾", "斤", "禁", "襟", "瑾"], + "jing": ["經", "精", "景", "警", "靜", "境", "競", "淨", "鏡", "徑", "驚", "京", "晶", "睛", "莖", "荊", "兢", "涇", "憬"], + "jiong": ["窘", "炯", "迥"], + "jiu": ["就", "九", "久", "酒", "舊", "救", "究", "糾", "舅", "揪", "韭", "灸", "玖", "臼"], + "ju": ["句", "具", "據", "局", "舉", "巨", "聚", "居", "距", "懼", "劇", "鋸", "矩", "拒", "俱", "菊", "橘", "颶", "踞", "遽"], + "juan": ["卷", "捐", "圈", "眷", "倦", "娟", "雋", "涓", "鐫"], + "jue": ["決", "覺", "絕", "角", "爵", "掘", "倔", "厥", "譎", "獗", "矍", "嚼"], + "jun": ["軍", "君", "均", "俊", "菌", "竣", "鈞", "峻", "雋"], + "ka": ["卡", "咖", "喀", "咔"], + "kai": ["開", "凱", "楷", "慨", "愷", "鎧", "鍇"], + "kan": ["看", "砍", "坎", "勘", "刊", "堪", "瞰", "龕"], + "kang": ["康", "抗", "扛", "亢", "糠", "慷", "伉"], + "kao": ["考", "靠", "烤", "拷", "栲", "犒"], + "ke": ["可", "客", "科", "刻", "課", "顆", "克", "渴", "柯", "棵", "磕", "咳", "殼", "坷"], + "ken": ["肯", "懇", "啃", "齦"], + "keng": ["坑", "吭", "鏗"], + "kong": ["空", "控", "恐", "孔"], + "kou": ["口", "扣", "叩", "寇", "摳"], + "ku": ["苦", "哭", "庫", "酷", "枯", "窟", "骷"], + "kua": ["跨", "誇", "垮", "挎", "胯"], + "kuai": ["快", "塊", "筷", "儈", "膾"], + "kuan": ["寬", "款"], + "kuang": ["況", "礦", "狂", "框", "曠", "眶", "筐", "匡", "誑"], + "kui": ["虧", "愧", "潰", "窺", "葵", "魁", "饋", "匱", "睽", "聵"], + "kun": ["困", "昆", "坤", "捆", "琨", "鯤"], + "kuo": ["擴", "括", "闊", "廓"], + "la": ["拉", "啦", "蠟", "辣", "臘", "喇", "落"], + "lai": ["來", "賴", "萊", "徠", "賚"], + "lan": ["藍", "蘭", "攔", "籃", "懶", "爛", "濫", "覽", "欄", "瀾", "嵐", "襤"], + "lang": ["浪", "郎", "狼", "廊", "朗", "琅", "螂", "朗"], + "lao": ["老", "勞", "落", "牢", "撈", "澇", "絡", "姥", "佬", "潦"], + "le": ["了", "樂", "勒", "肋"], + "lei": ["累", "類", "淚", "雷", "勒", "壘", "蕾", "磊", "擂", "鐳", "儡"], + "leng": ["冷", "愣", "楞"], + "li": ["裡", "力", "理", "利", "立", "離", "例", "歷", "李", "禮", "麗", "勵", "梨", "厘", "莉", "犁", "黎", "璃", "狸", "漓", "罹", "驪", "鱧", "吏", "栗"], + "lia": ["倆"], + "lian": ["連", "聯", "臉", "練", "蓮", "戀", "煉", "廉", "憐", "漣", "鐮", "斂", "璉"], + "liang": ["兩", "亮", "量", "良", "涼", "梁", "糧", "樑", "諒", "晾", "踉", "靚"], + "liao": ["了", "料", "聊", "療", "遼", "撩", "僚", "燎", "繚", "潦", "寥", "嘹"], + "lie": ["列", "烈", "獵", "裂", "劣", "咧", "冽", "捩", "躐"], + "lin": ["林", "臨", "鄰", "淋", "琳", "霖", "鱗", "麟", "遴", "藺", "吝", "躪"], + "ling": ["領", "零", "靈", "令", "另", "玲", "鈴", "陵", "嶺", "凌", "菱", "羚", "翎", "聆", "伶", "拎"], + "liu": ["六", "流", "留", "劉", "柳", "溜", "琉", "榴", "硫", "溜", "鎏", "鷚"], + "long": ["龍", "隆", "弄", "籠", "聾", "攏", "壟", "朗", "隴"], + "lou": ["樓", "漏", "露", "婁", "摟", "簍", "嘍", "螻"], + "lu": ["路", "錄", "陸", "綠", "露", "旅", "律", "慮", "呂", "履", "侶", "屢", "濾", "氯", "廬", "爐", "蘆", "盧", "顱", "魯", "擼", "祿", "麓"], + "lv": ["綠", "律", "旅", "慮", "呂", "履", "侶", "屢", "濾", "氯"], + "luan": ["亂", "卵", "巒", "鑾", "鸞", "欒"], + "lue": ["略", "掠"], + "lun": ["論", "輪", "倫", "侖", "綸", "淪"], + "luo": ["落", "羅", "洛", "絡", "邏", "鑼", "籮", "駱", "裸", "螺", "蘿", "摞"], + "ma": ["嗎", "媽", "馬", "麻", "罵", "嘛", "螞", "碼", "瑪", "抹", "摩"], + "mai": ["買", "賣", "麥", "埋", "邁", "脈", "霾"], + "man": ["滿", "慢", "曼", "漫", "蠻", "瞞", "饅", "蔓", "謾", "墁", "幔"], + "mang": ["忙", "盲", "茫", "芒", "莽", "氓", "硭"], + "mao": ["貓", "毛", "矛", "茅", "茂", "冒", "帽", "貌", "貿", "卯", "錨", "耄", "髦", "瑁", "懋"], + "me": ["麼"], + "mei": ["沒", "美", "妹", "每", "梅", "媒", "煤", "眉", "霉", "魅", "玫", "枚", "寐", "昧", "媚", "湄", "鎂", "糜"], + "men": ["們", "門", "悶", "燜", "捫"], + "meng": ["夢", "孟", "猛", "蒙", "盟", "萌", "朦", "檬", "懵", "礞", "蠐"], + "mi": ["米", "密", "迷", "蜜", "祕", "祕", "眯", "靡", "糜", "彌", "覓", "冪", "泌"], + "mian": ["面", "免", "棉", "眠", "綿", "勉", "緬", "冕", "娩", "湎", "眄"], + "miao": ["描", "秒", "妙", "廟", "苗", "瞄", "渺", "淼", "緲", "藐"], + "mie": ["滅", "蔑", "篾", "乜"], + "min": ["民", "敏", "名", "皿", "閔", "抿", "泯", "憫", "閔"], + "ming": ["名", "明", "命", "鳴", "銘", "冥", "茗", "溟", "瞑", "螟"], + "miu": ["謬"], + "mo": ["麼", "摸", "磨", "摩", "魔", "膜", "默", "墨", "抹", "末", "莫", "漠", "寞", "陌", "謨", "茉", "驀", "歿"], + "mou": ["某", "謀", "牟", "眸", "繆", "鍪"], + "mu": ["目", "母", "木", "幕", "牧", "慕", "墓", "暮", "穆", "睦", "沐", "募", "姆", "拇", "牡", "畝"], + "na": ["那", "拿", "哪", "納", "吶", "娜", "鈉", "衲"], + "nai": ["奶", "耐", "乃", "奈", "氖", "萘", "鼐"], + "nan": ["南", "難", "男", "喃", "楠", "赧"], + "nang": ["囊", "囔"], + "nao": ["腦", "惱", "鬧", "撓", "淖", "鐃", "橈"], + "ne": ["呢", "訥"], + "nei": ["內", "那"], + "nen": ["嫩", "恁"], + "neng": ["能"], + "ni": ["你", "妳", "呢", "泥", "尼", "擬", "逆", "妮", "霓", "倪", "匿", "溺", "膩", "旎"], + "nian": ["年", "念", "黏", "碾", "捻", "撚", "蔦"], + "niang": ["娘", "釀"], + "niao": ["鳥", "尿", "裊", "嬲"], + "nie": ["捏", "聶", "孽", "躡", "鎳", "囁", "臬", "涅"], + "nin": ["您"], + "ning": ["寧", "凝", "擰", "檸", "獰", "嚀", "甯"], + "niu": ["牛", "紐", "扭", "鈕", "妞", "拗"], + "nong": ["農", "濃", "弄", "膿", "儂"], + "nu": ["女", "努", "怒", "奴", "弩", "胬"], + "nv": ["女"], + "nuan": ["暖"], + "nue": ["虐", "瘧"], + "nuo": ["挪", "諾", "懦", "糯", "喏"], + "o": ["哦", "噢", "喔"], + "ou": ["歐", "偶", "嘔", "藕", "鷗", "漚", "慪"], + "pa": ["怕", "爬", "帕", "趴", "琶", "葩", "耙"], + "pai": ["排", "拍", "牌", "派", "徘", "湃", "俳"], + "pan": ["判", "盤", "盼", "攀", "畔", "胖", "叛", "潘", "磐", "蹣", "拚"], + "pang": ["旁", "胖", "龐", "膀", "磅", "彷", "螃"], + "pao": ["跑", "炮", "泡", "拋", "刨", "袍", "咆", "庖"], + "pei": ["配", "陪", "培", "賠", "佩", "沛", "裴", "胚", "霈"], + "pen": ["盆", "噴"], + "peng": ["朋", "碰", "彭", "棚", "蓬", "鵬", "捧", "烹", "澎", "朋", "怦", "砰", "堋"], + "pi": ["皮", "批", "披", "匹", "疲", "僻", "脾", "劈", "琵", "毗", "啤", "坯", "譬", "霹", "屁", "闢", "紕"], + "pian": ["片", "便", "騙", "偏", "篇", "翩", "扁", "諞"], + "piao": ["票", "飄", "漂", "瓢", "嫖", "縹", "驃"], + "pie": ["撇", "瞥", "苤"], + "pin": ["品", "貧", "頻", "聘", "拼", "拚", "嬪"], + "ping": ["平", "評", "憑", "瓶", "萍", "屏", "蘋", "坪", "萍", "秤", "娉", "馮"], + "po": ["破", "迫", "婆", "頗", "坡", "潑", "泊", "魄", "粕", "朴", "珀", "叵", "鄱"], + "pou": ["剖", "掊", "裒"], + "pu": ["普", "鋪", "樸", "譜", "浦", "葡", "蒲", "僕", "撲", "圃", "濮", "璞", "噗"], + "qi": ["起", "其", "氣", "期", "七", "奇", "妻", "棋", "齊", "旗", "企", "啟", "器", "棄", "汽", "祈", "騎", "豈", "漆", "契", "砌", "琪", "淇", "岐", "祁", "崎", "祺", "臍", "訖", "訖", "磧"], + "qia": ["恰", "洽", "卡", "掐", "髂", "袷"], + "qian": ["前", "錢", "千", "簽", "遷", "淺", "欠", "牽", "潛", "鉛", "謙", "乾", "嵌", "譴", "譴", "倩", "倩", "槍", "嗆", "薔", "牆", "強", "搶", "腔", "嗆", "羌", "嬙", "檣", "鏘", "鏹"], + "qiao": ["橋", "瞧", "巧", "敲", "俏", "殼", "竅", "喬", "翹", "峭", "俏", "撬", "憔", "譙", "樵"], + "qie": ["切", "且", "茄", "怯", "竊", "妾", "愜", "鍥", "伽"], + "qin": ["親", "琴", "勤", "侵", "秦", "欽", "禽", "寢", "沁", "芹", "擒", "噙", "覃"], + "qing": ["情", "請", "清", "青", "輕", "慶", "傾", "頃", "晴", "擎", "卿", "氫", "罄", "磬", "蜻", "鯖", "綮"], + "qiong": ["窮", "瓊", "穹", "煢", "邛", "蛩"], + "qiu": ["求", "球", "秋", "丘", "邱", "囚", "酋", "泅", "俅", "裘", "遒", "賒"], + "qu": ["去", "取", "曲", "區", "趣", "娶", "渠", "屈", "驅", "蛆", "軀", "祛", "瞿", "蛐", "麴", "衢"], + "quan": ["全", "權", "圈", "泉", "拳", "犬", "勸", "券", "詮", "痊", "銓", "蜷", "顴"], + "que": ["確", "卻", "缺", "雀", "鵲", "闕", "瘸", "榷", "愨"], + "qun": ["群", "裙", "逡"], + "ran": ["然", "燃", "染", "冉", "髯", "蚺"], + "rang": ["讓", "嚷", "壤", "攘", "穰", "瓤"], + "rao": ["擾", "繞", "饒", "嬈", "橈", "蕘"], + "re": ["熱", "惹", "喏"], + "ren": ["人", "認", "任", "仁", "忍", "刃", "韌", "紉", "妊", "葚", "稔"], + "reng": ["仍", "扔"], + "ri": ["日"], + "rong": ["容", "榮", "融", "絨", "溶", "蓉", "榕", "戎", "茸", "冗", "嶸", "狨"], + "rou": ["肉", "柔", "揉", "蹂", "鞣", "糅"], + "ru": ["如", "入", "儒", "乳", "辱", "孺", "茹", "蠕", "嚅", "濡", "縟", "洳"], + "ruan": ["軟", "阮"], + "rui": ["瑞", "銳", "蕊", "芮", "蚋", "枘"], + "run": ["潤", "閏"], + "ruo": ["若", "弱", "偌", "箬", "蒻"], + "sa": ["撒", "灑", "薩", "卅", "颯"], + "sai": ["賽", "塞", "腮", "鰓", "噻"], + "san": ["三", "散", "傘", "參", "霰"], + "sang": ["喪", "桑", "嗓", "顙", "搡"], + "sao": ["掃", "嫂", "騷", "搔", "瘙", "繅"], + "se": ["色", "塞", "瑟", "澀", "嗇", "穡"], + "sen": ["森"], + "seng": ["僧"], + "sha": ["殺", "沙", "紗", "傻", "啥", "煞", "莎", "杉", "剎", "砂", "痧", "裟", "鎩", "霎"], + "shai": ["曬", "篩", "色"], + "shan": ["山", "善", "閃", "衫", "扇", "杉", "刪", "珊", "柵", "膳", "擅", "贍", "汕", "潸", "姍", "煽", "跚", "訕", "疝", "鱔"], + "shang": ["上", "商", "傷", "尚", "賞", "裳", "熵", "觴", "殤", "垧"], + "shao": ["少", "燒", "紹", "稍", "勺", "哨", "韶", "捎", "梢", "芍", "苕", "蛸", "筲"], + "she": ["社", "設", "射", "蛇", "舌", "捨", "涉", "赦", "攝", "奢", "賒", "麝", "懾", "灄"], + "shei": ["誰"], + "shen": ["身", "深", "神", "什", "申", "伸", "審", "慎", "腎", "滲", "沈", "參", "甚", "嬸", "砷", "莘", "哂", "瀋", "糝"], + "sheng": ["生", "聲", "勝", "升", "省", "聖", "盛", "剩", "繩", "笙", "甥", "晟"], + "shi": ["是", "時", "事", "實", "十", "使", "史", "市", "世", "師", "施", "式", "示", "石", "室", "士", "視", "試", "食", "駛", "始", "勢", "失", "適", "仕", "飾", "濕", "詩", "屍", "虱", "誓", "嗜", "噬", "柿", "拭", "逝", "螫", "諡", "鈰", "鰣"], + "shou": ["手", "首", "受", "收", "授", "瘦", "獸", "壽", "售", "守", "狩", "綬", "艏"], + "shu": ["書", "數", "樹", "輸", "術", "述", "叔", "屬", "暑", "署", "鼠", "束", "疏", "舒", "淑", "梳", "抒", "殊", "蔬", "孰", "贖", "熟", "恕", "庶", "墅", "俞", "澍", "紓", "倏", "毹"], + "shua": ["刷", "耍", "唰"], + "shuai": ["帥", "率", "摔", "甩", "蟀"], + "shuan": ["栓", "拴", "閂", "涮"], + "shuang": ["雙", "爽", "霜", "孀"], + "shui": ["水", "說", "稅", "睡", "誰"], + "shun": ["順", "瞬", "舜", "吮"], + "shuo": ["說", "數", "碩", "朔", "爍", "鑠", "蒴", "搠"], + "si": ["四", "死", "思", "絲", "私", "司", "斯", "撕", "似", "肆", "寺", "祀", "廝", "嘶", "俬", "巳", "廝"], + "song": ["送", "松", "宋", "頌", "誦", "聳", "嵩", "凇", "菘", "淞"], + "sou": ["搜", "艘", "擻", "叟", "嗖", "餿", "溲", "颼", "瞍"], + "su": ["速", "素", "蘇", "訴", "俗", "塑", "溯", "宿", "粟", "夙", "簌", "愫", "嗉", "謖"], + "suan": ["算", "酸", "蒜", "狻"], + "sui": ["隨", "歲", "雖", "碎", "遂", "穗", "隧", "髓", "遂", "祟", "綏", "邃", "燧", "謁"], + "sun": ["損", "孫", "筍", "遜", "榫", "蓀", "猻"], + "suo": ["所", "鎖", "索", "縮", "瑣", "嗦", "唆", "梭", "嗩", "娑", "蓑"], + "ta": ["他", "她", "它", "塔", "踏", "拓", "榻", "獺", "撻", "闒", "遢"], + "tai": ["太", "台", "臺", "態", "泰", "抬", "胎", "臺", "鮐", "薹", "駘", "炱", "邰"], + "tan": ["談", "探", "彈", "壇", "攤", "貪", "嘆", "潭", "坦", "毯", "痰", "檀", "譚", "忐", "袒", "郯", "澹", "覃"], + "tang": ["堂", "唐", "糖", "躺", "趟", "湯", "燙", "塘", "膛", "棠", "搪", "螳", "鏜", "鏜", "鐋", "耥"], + "tao": ["套", "逃", "桃", "陶", "討", "濤", "掏", "滔", "萄", "淘", "陶", "燾", "絳", "叨"], + "te": ["特", "忒", "慝", "鋱"], + "teng": ["疼", "騰", "藤", "滕", "謄"], + "ti": ["提", "題", "體", "替", "踢", "梯", "剔", "蹄", "啼", "惕", "涕", "銻", "倜", "悌", "嚏"], + "tian": ["天", "田", "填", "甜", "添", "恬", "腆", "殄", "忝", "闐", "祆"], + "tiao": ["條", "跳", "調", "挑", "眺", "佻", "祧", "銚", "髫", "鰷"], + "tie": ["鐵", "貼", "帖", "萜"], + "ting": ["聽", "停", "庭", "挺", "廳", "廷", "亭", "婷", "艇", "汀", "蜓", "霆", "鋌", "莛"], + "tong": ["通", "同", "統", "童", "痛", "銅", "桶", "筒", "桐", "彤", "瞳", "佟", "酮", "嗵", "憧"], + "tou": ["頭", "投", "透", "偷", "骰"], + "tu": ["圖", "土", "突", "途", "吐", "兔", "屠", "徒", "凸", "禿", "荼", "釷", "菟"], + "tuan": ["團", "摶", "彖", "湍"], + "tui": ["推", "退", "腿", "蛻", "頹", "褪"], + "tun": ["吞", "屯", "臀", "囤", "褪", "豚"], + "tuo": ["脫", "托", "拖", "妥", "拓", "唾", "陀", "沱", "坨", "駝", "鴕", "橐", "砣", "佗", "跎"], + "wa": ["挖", "哇", "蛙", "瓦", "娃", "襪", "凹", "媧", "佤", "腽"], + "wai": ["外", "歪", "崴"], + "wan": ["完", "晚", "玩", "碗", "彎", "灣", "丸", "婉", "腕", "惋", "宛", "蜿", "豌", "莞", "綰", "剜"], + "wang": ["王", "往", "忘", "亡", "望", "網", "旺", "汪", "妄", "罔", "惘", "輞", "尪"], + "wei": ["為", "位", "未", "委", "圍", "唯", "威", "偉", "危", "尾", "微", "維", "違", "胃", "餵", "味", "慰", "魏", "衛", "畏", "萎", "偽", "娓", "惟", "巍", "緯", "煒", "韋", "薇", "帷", "渭", "猬", "闈", "洧", "沩"], + "wen": ["問", "文", "聞", "溫", "穩", "紋", "吻", "蚊", "雯", "紊", "刎", "璺", "問"], + "weng": ["翁", "嗡", "甕", "蓊"], + "wo": ["我", "握", "臥", "窩", "沃", "蝸", "幄", "斡", "喔", "倭", "萵", "齷"], + "wu": ["無", "五", "物", "務", "武", "舞", "誤", "惡", "午", "吳", "吾", "屋", "烏", "污", "悟", "霧", "捂", "巫", "嗚", "蕪", "梧", "唔", "戊", "塢", "憮", "嫵", "廡", "忤", "兀", "鵡", "鎢", "浯", "蜈", "齬"], + "xi": ["西", "系", "息", "希", "席", "習", "細", "喜", "戲", "洗", "惜", "稀", "溪", "錫", "析", "膝", "襲", "昔", "熙", "夕", "兮", "悉", "惜", "熄", "嬉", "汐", "犀", "烯", "曦", "奚", "唏", "唶", "淅", "嘻", "樨", "熙", "蠡", "璽", "徙", "隙", "戲", "餼", "覡", "闟"], + "xia": ["下", "夏", "嚇", "廈", "峽", "蝦", "瞎", "霞", "轄", "俠", "暇", "遐", "瑕", "匣", "黠", "硤", "罅"], + "xian": ["先", "現", "線", "限", "縣", "顯", "險", "鮮", "獻", "賢", "閒", "仙", "鹹", "羨", "陷", "憲", "餡", "羨", "掀", "纖", "閑", "涎", "嫻", "銜", "冼", "燹", "蜆", "筧", "薟", "躚"], + "xiang": ["想", "向", "相", "鄉", "香", "響", "享", "像", "象", "項", "巷", "降", "箱", "祥", "湘", "詳", "翔", "享", "襄", "鑲", "廂", "驤", "薌", "餉", "緗", "嚮", "嚮"], + "xiao": ["小", "笑", "效", "消", "校", "銷", "曉", "蕭", "肖", "削", "孝", "宵", "硝", "霄", "淆", "嘯", "驍", "梟", "瀟", "簫", "筱", "驍", "嘵", "蟰"], + "xie": ["些", "寫", "謝", "協", "鞋", "血", "歇", "斜", "脅", "諧", "攜", "洩", "卸", "懈", "蟹", "邪", "械", "屑", "偕", "褻", "榭", "廨", "瀣", "薤", "躞", "頡", "擷"], + "xin": ["新", "心", "信", "辛", "欣", "薪", "馨", "鑫", "芯", "鋅", "昕", "忻", "歆", "鐔", "囟"], + "xing": ["行", "星", "形", "性", "姓", "興", "刑", "型", "幸", "杏", "腥", "猩", "邢", "悻", "滎", "滎", "餳"], + "xiong": ["兄", "胸", "兇", "雄", "熊", "匈", "洶", "夐"], + "xiu": ["修", "休", "秀", "宿", "袖", "秀", "繡", "羞", "臭", "朽", "嗅", "鏽", "饈", "貅", "鵂", "岫"], + "xu": ["須", "需", "許", "續", "序", "徐", "虛", "緒", "蓄", "敘", "旭", "恤", "墟", "絮", "婿", "栩", "戌", "詡", "洫", "溆", "酗", "糈", "勖", "昫", "盱", "蓿"], + "xuan": ["選", "宣", "懸", "旋", "玄", "軒", "喧", "炫", "渲", "萱", "漩", "璇", "癬", "炫", "煊", "諼", "鋗"], + "xue": ["學", "雪", "血", "穴", "謔", "噱", "鱈"], + "xun": ["訊", "迅", "尋", "巡", "訓", "詢", "循", "旬", "熏", "勳", "薰", "潯", "馴", "汛", "遜", "殉", "徇", "巽", "塤", "曛", "窯", "鱘"], + "ya": ["呀", "壓", "牙", "亞", "雅", "鴨", "押", "芽", "涯", "訝", "崖", "啞", "衙", "軋", "蚜", "崖", "睚", "痖"], + "yan": ["言", "研", "眼", "嚴", "演", "驗", "煙", "顏", "鹽", "延", "沿", "燕", "宴", "炎", "掩", "演", "衍", "岩", "研", "艷", "雁", "焰", "厭", "彥", "諺", "堰", "硯", "嫣", "閻", "焉", "淹", "偃", "儼", "兗", "讌", "讞", "筵", "蜓", "鼴", "罨", "剡", "鄢", "閆", "滟", "妍", "琰", "罳"], + "yang": ["樣", "陽", "洋", "養", "央", "揚", "羊", "氧", "仰", "癢", "漾", "殃", "秧", "恙", "颺", "煬", "佯", "瘍", "鞅", "樣"], + "yao": ["要", "藥", "搖", "遙", "腰", "邀", "耀", "瑤", "姚", "咬", "堯", "鑰", "謠", "夭", "妖", "窯", "杳", "舀", "徭", "珧", "軺", "銚", "鰩", "么", "瘧"], + "ye": ["也", "業", "夜", "葉", "爺", "野", "液", "謁", "頁", "邪", "掖", "曳", "腋", "噎", "鄴", "曄", "燁", "鐺"], + "yi": ["一", "以", "已", "意", "義", "議", "易", "藝", "醫", "億", "憶", "移", "依", "疑", "譯", "異", "益", "亦", "役", "抑", "譯", "溢", "宜", "儀", "逸", "怡", "姨", "夷", "遺", "倚", "椅", "伊", "毅", "誼", "翌", "熠", "臆", "肄", "懿", "裔", "縊", "軼", "貽", "漪", "迤", "弋", "噫", "屹", "猗", "嶷", "揖", "壹", "挹", "佚", "詣", "懌", "懿", "曀", "繹", "驛", "羿", "釔", "鐿", "瘞", "苡", "薏", "悒", "挹", "嗌", "峄"], + "yin": ["因", "音", "引", "銀", "印", "飲", "隱", "陰", "吟", "尹", "殷", "茵", "蔭", "垠", "夤", "齦", "湮", "氤", "胤", "鄞", "喑", "洇", "狺"], + "ying": ["應", "英", "營", "迎", "影", "贏", "硬", "映", "盈", "穎", "瑩", "鷹", "嬰", "櫻", "瀛", "蠅", "瀛", "嬴", "罌", "縈", "楹", "熒", "螢", "瀅", "瓔", "鸚", "膺", "瀠", "瀛"], + "yo": ["喲", "唷"], + "yong": ["用", "永", "擁", "勇", "湧", "庸", "泳", "庸", "傭", "踴", "蛹", "恿", "鏞", "傭", "臃", "癰", "邕", "鏞", "墉", "慵", "灉"], + "you": ["有", "又", "由", "友", "右", "優", "油", "遊", "幼", "尤", "憂", "幽", "悠", "誘", "佑", "釉", "柚", "酉", "猶", "黝", "卣", "疣", "蚰", "宥", "侑", "呦", "銪", "牖", "蝣", "蝤", "繇", "輶", "夂"], + "yu": ["與", "於", "語", "雨", "魚", "遇", "欲", "育", "域", "預", "愈", "玉", "宇", "余", "譽", "獄", "漁", "愚", "輿", "寓", "御", "裕", "郁", "喻", "逾", "娛", "吁", "逾", "瑜", "馭", "毓", "諭", "豫", "隅", "昱", "覦", "覦", "歟", "煜", "燠", "聿", "鈺", "嶼", "傴", "圄", "圉", "禺", "芋", "飫", "閾", "嫗", "煜", "鷸", "譽", "瘐", "窳", "餘", "雩", "齬", "禺", "滪", "窳", "肀"], + "yuan": ["元", "原", "員", "圓", "院", "源", "遠", "願", "緣", "園", "怨", "冤", "援", "袁", "淵", "猿", "轅", "媛", "垣", "沅", "塬", "圜", "鴛", "鳶", "螈", "爰", "瑗", "掾", "圜"], + "yue": ["月", "約", "越", "樂", "曰", "閱", "躍", "悅", "岳", "粵", "淵", "曰", "鑰", "櫟", "鉞", "瀹", "龠", "刖", "軏"], + "yun": ["雲", "運", "員", "韻", "勻", "允", "孕", "蘊", "暈", "隕", "耘", "紜", "韻", "慍", "殞", "惲", "醞", "狁", "勻", "鄖"], + "za": ["雜", "砸", "咂", "拶"], + "zai": ["在", "再", "載", "災", "宰", "栽", "崽", "哉"], + "zan": ["咱", "讚", "暫", "讚", "拶", "昝", "簪", "糌"], + "zang": ["藏", "臟", "葬", "臟", "臧", "奘", "駔"], + "zao": ["早", "造", "遭", "燥", "澡", "藻", "棗", "躁", "鑿", "蚤", "皁", "竈"], + "ze": ["則", "責", "擇", "澤", "側", "仄", "迮", "幘", "賾", "箦"], + "zei": ["賊"], + "zen": ["怎", "譖"], + "zeng": ["增", "贈", "憎", "甑", "繒", "罾"], + "zha": ["炸", "紮", "查", "渣", "扎", "眨", "柵", "詐", "乍", "榨", "吒", "砟", "蚱", "齇", "鮓", "醡"], + "zhai": ["債", "寨", "齋", "摘", "窄", "翟", "瘵"], + "zhan": ["站", "展", "戰", "佔", "斬", "瞻", "沾", "詹", "盞", "嶄", "湛", "綻", "輾", "搌", "旃"], + "zhang": ["長", "張", "章", "掌", "丈", "帳", "仗", "脹", "障", "彰", "漳", "璋", "嶂", "幛", "瘴", "鄣"], + "zhao": ["找", "照", "招", "朝", "趙", "兆", "罩", "肇", "詔", "沼", "爪", "召", "昭", "嘲", "濯", "櫂", "笊"], + "zhe": ["這", "著", "者", "折", "哲", "蔗", "遮", "轍", "浙", "褶", "蟄", "鷓", "謫", "輒", "晢", "蜇"], + "zhei": ["這"], + "zhen": ["真", "針", "鎮", "陣", "珍", "震", "振", "診", "枕", "斟", "甄", "臻", "疹", "砧", "貞", "偵", "軫", "縝", "榛", "楨", "賑", "禎", "畛", "圳", "蓁", "斟"], + "zheng": ["正", "政", "整", "爭", "證", "鄭", "征", "蒸", "掙", "睜", "錚", "崢", "箏", "怔", "拯", "鉦", "幀", "諍", "癥"], + "zhi": ["之", "知", "只", "至", "指", "支", "直", "值", "制", "質", "治", "職", "紙", "誌", "置", "智", "植", "枝", "止", "址", "芝", "脂", "肢", "旨", "侄", "稚", "滯", "摯", "緻", "秩", "幟", "峙", "窒", "幟", "炙", "幟", "幟", "卮", "芷", "梔", "趾", "蜘", "躓", "雉", "膣", "騭", "躑", "豸", "幟", "輊", "贄", "鷙", "痣", "蛭", "幟"], + "zhong": ["中", "種", "重", "眾", "終", "鐘", "忠", "腫", "仲", "衷", "鍾", "盅", "舯", "螽", "冢"], + "zhou": ["周", "州", "洲", "舟", "皺", "軸", "宙", "粥", "肘", "帚", "胄", "紂", "咒", "晝", "縐", "碡", "僽"], + "zhu": ["主", "住", "注", "著", "助", "築", "逐", "祝", "豬", "珠", "朱", "諸", "竹", "株", "燭", "矚", "駐", "鑄", "煮", "拄", "囑", "矚", "佇", "杼", "渚", "瀦", "躅", "櫫", "褚", "苧", "洙", "瀦", "麈", "瘃"], + "zhua": ["抓", "爪"], + "zhuai": ["轉", "拽"], + "zhuan": ["專", "轉", "傳", "賺", "磚", "撰", "篆", "饌", "顓"], + "zhuang": ["裝", "狀", "莊", "撞", "壯", "幢", "妝", "樁"], + "zhui": ["追", "墜", "綴", "贅", "縋", "惴", "騅"], + "zhun": ["準", "諄", "肫", "窀"], + "zhuo": ["著", "桌", "捉", "卓", "濁", "灼", "酌", "拙", "琢", "茁", "濁", "擢", "倬", "涿", "浞", "禚", "斫"], + "zi": ["子", "自", "字", "資", "紫", "茲", "姿", "咨", "滋", "孜", "籽", "梓", "漬", "諮", "姊", "孳", "恣", "甾", "輜", "錙", "齜", "耔", "笫"], + "zong": ["總", "從", "縱", "綜", "宗", "棕", "蹤", "鬃", "粽", "偬", "綜", "腙"], + "zou": ["走", "奏", "鄒", "揍", "騶", "諏", "陬", "鯫"], + "zu": ["足", "族", "組", "租", "阻", "卒", "俎", "詛", "菹"], + "zuan": ["鑽", "纂", "攢", "繵", "躜"], + "zui": ["最", "罪", "嘴", "醉", "蕞"], + "zun": ["尊", "遵", "樽", "撙"], + "zuo": ["做", "作", "座", "左", "昨", "佐", "琢", "撮", "唑", "嘬", "怍", "祚", "胙"] + } +} diff --git a/Shared/Resource/kb_input_profiles.json b/Shared/Resource/kb_input_profiles.json index 42cd979..bc82373 100644 --- a/Shared/Resource/kb_input_profiles.json +++ b/Shared/Resource/kb_input_profiles.json @@ -17,28 +17,14 @@ }, { "code": "es", - "name": "Español", + "name": "Español (Latinoamérica)", "defaultSkinZip": "", "layouts": [ { "variant": "qwerty", "title": "QWERTY", - "profileId": "es_ES_qwerty", - "layoutJsonId": "letters", - "suggestionEngine": "latin" - }, - { - "variant": "azerty", - "title": "AZERTY", - "profileId": "es_ES_azerty", - "layoutJsonId": "letters_azerty", - "suggestionEngine": "latin" - }, - { - "variant": "qwertz", - "title": "QWERTZ", - "profileId": "es_ES_qwertz", - "layoutJsonId": "letters_qwertz", + "profileId": "es_419_qwerty", + "layoutJsonId": "letters_es", "suggestionEngine": "latin" } ] @@ -52,7 +38,7 @@ "variant": "qwerty", "title": "QWERTY", "profileId": "pt_PT_qwerty", - "layoutJsonId": "letters", + "layoutJsonId": "letters_pt", "suggestionEngine": "latin" } ] @@ -66,7 +52,7 @@ "variant": "pinyin", "title": "拼音(繁體)", "profileId": "zh_Hant_TW_pinyin", - "layoutJsonId": "letters", + "layoutJsonId": "letters_zh_hant_pinyin", "suggestionEngine": "pinyin_traditional" }, { @@ -94,24 +80,10 @@ "variant": "qwerty", "title": "QWERTY", "profileId": "id_ID_qwerty", - "layoutJsonId": "letters", + "layoutJsonId": "letters_id", "suggestionEngine": "latin" } ] - }, - { - "code": "zh-Hans", - "name": "简体中文", - "defaultSkinZip": "", - "layouts": [ - { - "variant": "qwerty", - "title": "QWERTY", - "profileId": "zh_Hans_CN_qwerty", - "layoutJsonId": "letters", - "suggestionEngine": "pinyin_simplified" - } - ] } ] } diff --git a/keyBoard.xcodeproj/project.pbxproj b/keyBoard.xcodeproj/project.pbxproj index 406192f..057277e 100644 --- a/keyBoard.xcodeproj/project.pbxproj +++ b/keyBoard.xcodeproj/project.pbxproj @@ -35,6 +35,11 @@ 04286A062ECC81B200CE730C /* KBSkinService.m in Sources */ = {isa = PBXBuildFile; fileRef = 04286A052ECC81B200CE730C /* KBSkinService.m */; }; 04286A0B2ECD88B400CE730C /* KeyboardAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 04286A0A2ECD88B400CE730C /* KeyboardAssets.xcassets */; }; 04286A132ECDEBF900CE730C /* KBSkinIconMap.strings in Resources */ = {isa = PBXBuildFile; fileRef = 041007D12ECE012000D203BB /* KBSkinIconMap.strings */; }; + 043213A32F5528140065C888 /* bopomofo_to_chinese.json in Resources */ = {isa = PBXBuildFile; fileRef = 043213A12F5528140065C888 /* bopomofo_to_chinese.json */; }; + 043213A42F5528140065C888 /* pinyin_to_traditional.json in Resources */ = {isa = PBXBuildFile; fileRef = 043213A22F5528140065C888 /* pinyin_to_traditional.json */; }; + 043213A62F5561FD0065C888 /* kb_keyboard_layouts_i18n.json in Resources */ = {isa = PBXBuildFile; fileRef = 043213A52F5561FD0065C888 /* kb_keyboard_layouts_i18n.json */; }; + 043213A92F5566EF0065C888 /* kb_input_profiles.json in Resources */ = {isa = PBXBuildFile; fileRef = 043213A72F5566EF0065C888 /* kb_input_profiles.json */; }; + 043213AA2F5566EF0065C888 /* kb_input_profiles.json in Resources */ = {isa = PBXBuildFile; fileRef = 043213A72F5566EF0065C888 /* kb_input_profiles.json */; }; 043FBCD22EAF97630036AFE1 /* KBPermissionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 04C6EAE12EAF940F0089C901 /* KBPermissionViewController.m */; }; 0450AA742EF013D000B6AF06 /* KBEmojiCollectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 0450AA732EF013D000B6AF06 /* KBEmojiCollectionCell.m */; }; 0450AAE22EF03D5100B6AF06 /* KBPerson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0450AAE12EF03D5100B6AF06 /* KBPerson.swift */; }; @@ -383,6 +388,10 @@ 04286A042ECC81B200CE730C /* KBSkinService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinService.h; sourceTree = ""; }; 04286A052ECC81B200CE730C /* KBSkinService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinService.m; sourceTree = ""; }; 04286A0A2ECD88B400CE730C /* KeyboardAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = KeyboardAssets.xcassets; sourceTree = ""; }; + 043213A12F5528140065C888 /* bopomofo_to_chinese.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = bopomofo_to_chinese.json; sourceTree = ""; }; + 043213A22F5528140065C888 /* pinyin_to_traditional.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = pinyin_to_traditional.json; sourceTree = ""; }; + 043213A52F5561FD0065C888 /* kb_keyboard_layouts_i18n.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = kb_keyboard_layouts_i18n.json; sourceTree = ""; }; + 043213A72F5566EF0065C888 /* kb_input_profiles.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = kb_input_profiles.json; sourceTree = ""; }; 0450AA722EF013D000B6AF06 /* KBEmojiCollectionCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBEmojiCollectionCell.h; sourceTree = ""; }; 0450AA732EF013D000B6AF06 /* KBEmojiCollectionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBEmojiCollectionCell.m; sourceTree = ""; }; 0450AAE02EF03D5100B6AF06 /* keyBoard-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "keyBoard-Bridging-Header.h"; sourceTree = ""; }; @@ -917,8 +926,11 @@ children = ( A1B2C3EC2F20000000000001 /* kb_words.txt */, A1B2C3F02F20000000000002 /* kb_keyboard_layout_config.json */, + 043213A52F5561FD0065C888 /* kb_keyboard_layouts_i18n.json */, 0498BDF42EEC50EE006CC1D5 /* emoji_categories.json */, 041007D12ECE012000D203BB /* KBSkinIconMap.strings */, + 043213A12F5528140065C888 /* bopomofo_to_chinese.json */, + 043213A22F5528140065C888 /* pinyin_to_traditional.json */, ); path = Resource; sourceTree = ""; @@ -1039,6 +1051,14 @@ path = Chat; sourceTree = ""; }; + 043213A82F5566EF0065C888 /* Resource */ = { + isa = PBXGroup; + children = ( + 043213A72F5566EF0065C888 /* kb_input_profiles.json */, + ); + path = Resource; + sourceTree = ""; + }; 0450ABFB2EF11E4400B6AF06 /* Converts */ = { isa = PBXGroup; children = ( @@ -2079,6 +2099,7 @@ 04FC98002EB36AAB007BD342 /* Shared */ = { isa = PBXGroup; children = ( + 043213A82F5566EF0065C888 /* Resource */, 04A9FE1F2EB893F10020DB6D /* Localization */, 04FC98012EB36AAB007BD342 /* KBConfig.h */, 04122F592EC5D40000EF7AB3 /* KBAPI.h */, @@ -2267,7 +2288,11 @@ A1B2C3ED2F20000000000001 /* kb_words.txt in Resources */, A1B2C3F12F20000000000002 /* kb_keyboard_layout_config.json in Resources */, 0498BDF52EEC50EE006CC1D5 /* emoji_categories.json in Resources */, + 043213A32F5528140065C888 /* bopomofo_to_chinese.json in Resources */, + 043213A42F5528140065C888 /* pinyin_to_traditional.json in Resources */, + 043213AA2F5566EF0065C888 /* kb_input_profiles.json in Resources */, 04286A0B2ECD88B400CE730C /* KeyboardAssets.xcassets in Resources */, + 043213A62F5561FD0065C888 /* kb_keyboard_layouts_i18n.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2291,6 +2316,7 @@ 04C6EABD2EAF86530089C901 /* Main.storyboard in Resources */, 046086CB2F1A092500757C95 /* comments_mock.json in Resources */, 04E038E32F20E500002CA5A0 /* deepgramAPI.md in Resources */, + 043213A92F5566EF0065C888 /* kb_input_profiles.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/keyBoard/Class/Me/VC/KBPersonInfoVC.m b/keyBoard/Class/Me/VC/KBPersonInfoVC.m index 82f76c3..6db631b 100644 --- a/keyBoard/Class/Me/VC/KBPersonInfoVC.m +++ b/keyBoard/Class/Me/VC/KBPersonInfoVC.m @@ -583,12 +583,15 @@ typedef void(^KBInputProfileSelectHandler)(NSString *languageCode, NSString *lay return; } - // 严格策略:该语言未配置默认皮肤时,不允许切换语言。 KBInputProfile *profile = [[KBInputProfileManager sharedManager] profileForLanguageCode:languageCode]; NSString *zipName = profile.defaultSkinZip; + if (zipName.length == 0) { - [KBHUD showInfo:KBLocalized(@"Please configure a default skin for this language before switching.")]; - if (completion) { completion(NO); } + NSLog(@"[KBPersonInfoVC] No defaultSkinZip configured for %@, skipping skin installation", languageCode); + [self commitInputProfileSwitchWithLanguageCode:languageCode + layoutVariant:layoutVariant + profileId:profileId]; + if (completion) { completion(YES); } return; }