This commit is contained in:
2026-03-04 13:44:56 +08:00
parent f30b1d7640
commit b1f1ddec7e
9 changed files with 331 additions and 60 deletions

View File

@@ -369,13 +369,7 @@ static NSString *KBFormatMB(uint64_t bytes) {
if (context.length == 0) {
return @"";
}
static NSCharacterSet *letters = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
letters = [NSCharacterSet
characterSetWithCharactersInString:
@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"];
});
NSCharacterSet *letters = [self kb_allowedSuggestionCharacterSet];
NSInteger idx = (NSInteger)context.length - 1;
while (idx >= 0) {
@@ -396,13 +390,7 @@ static NSString *KBFormatMB(uint64_t bytes) {
if (text.length == 0) {
return NO;
}
static NSCharacterSet *letters = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
letters = [NSCharacterSet
characterSetWithCharactersInString:
@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"];
});
NSCharacterSet *letters = [self kb_allowedSuggestionCharacterSet];
for (NSUInteger i = 0; i < text.length; i++) {
if (![letters characterIsMember:[text characterAtIndex:i]]) {
return NO;
@@ -411,6 +399,61 @@ static NSString *KBFormatMB(uint64_t bytes) {
return YES;
}
- (NSCharacterSet *)kb_allowedSuggestionCharacterSet {
switch (self.suggestionEngine.engineType) {
case KBSuggestionEngineTypeSpanish:
return [self kb_spanishSuggestionCharacterSet];
case KBSuggestionEngineTypeBopomofo:
return [self kb_bopomofoSuggestionCharacterSet];
case KBSuggestionEngineTypeLatin:
case KBSuggestionEngineTypePortuguese:
case KBSuggestionEngineTypeIndonesian:
case KBSuggestionEngineTypePinyinSimplified:
case KBSuggestionEngineTypePinyinTraditional:
default:
return [self kb_latinSuggestionCharacterSet];
}
}
- (NSCharacterSet *)kb_latinSuggestionCharacterSet {
static NSCharacterSet *set = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
set = [NSCharacterSet characterSetWithCharactersInString:
@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
"áÁàÀâÂãÃäÄåÅæÆçÇ"
"éÉèÈêÊëË"
"íÍìÌîÎïÏ"
"ñÑ"
"óÓòÒôÔõÕöÖøØ"
"úÚùÙûÛüÜ"
"ýÝÿ"];
});
return set;
}
- (NSCharacterSet *)kb_spanishSuggestionCharacterSet {
static NSCharacterSet *set = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
set = [NSCharacterSet characterSetWithCharactersInString:
@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
"áÁéÉíÍóÓúÚñÑüÜ"];
});
return set;
}
- (NSCharacterSet *)kb_bopomofoSuggestionCharacterSet {
static NSCharacterSet *set = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
set = [NSCharacterSet characterSetWithCharactersInString:
@"ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄧㄨㄩㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦ"
"˙ˊˇˋ"];
});
return set;
}
- (void)kb_updateSuggestionsForCurrentWord {
NSString *prefix = self.currentWord ?: @"";
if (prefix.length == 0) {