summaryrefslogtreecommitdiff
path: root/platform/darwin/src/NSString+MGLAdditions.m
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src/NSString+MGLAdditions.m')
-rw-r--r--platform/darwin/src/NSString+MGLAdditions.m22
1 files changed, 22 insertions, 0 deletions
diff --git a/platform/darwin/src/NSString+MGLAdditions.m b/platform/darwin/src/NSString+MGLAdditions.m
index 04a65dc5e2..5c32f4b789 100644
--- a/platform/darwin/src/NSString+MGLAdditions.m
+++ b/platform/darwin/src/NSString+MGLAdditions.m
@@ -10,6 +10,28 @@
return self.length ? self : nil;
}
+- (NSString *)mgl_titleCasedStringWithLocale:(NSLocale *)locale {
+ NSMutableString *string = self.mutableCopy;
+ [string enumerateLinguisticTagsInRange:string.mgl_wholeRange scheme:NSLinguisticTagSchemeLexicalClass options:0 orthography:nil usingBlock:^(NSString * _Nonnull tag, NSRange tokenRange, NSRange sentenceRange, BOOL * _Nonnull stop) {
+ NSString *word = [string substringWithRange:tokenRange];
+ if (word.length > 3
+ || !([tag isEqualToString:NSLinguisticTagConjunction]
+ || [tag isEqualToString:NSLinguisticTagPreposition]
+ || [tag isEqualToString:NSLinguisticTagDeterminer]
+ || [tag isEqualToString:NSLinguisticTagParticle]
+ || [tag isEqualToString:NSLinguisticTagClassifier])) {
+ unichar firstLetter = [[word capitalizedStringWithLocale:locale] characterAtIndex:0];
+ NSString *suffix = [word substringFromIndex:1];
+ if (!([word hasPrefix:@"i"] && suffix.length
+ && [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[suffix characterAtIndex:0]])) {
+ word = [NSString stringWithFormat:@"%C%@", firstLetter, suffix];
+ }
+ }
+ [string replaceCharactersInRange:tokenRange withString:word];
+ }];
+ return string;
+}
+
@end
@implementation NSAttributedString (MGLAdditions)