/* Definition of class NSPersonNameComponents Copyright (C) 2019 Free Software Foundation, Inc. Implemented by: Gregory Casamento Date: Sep 2019 This file is part of the GNUstep Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import "Foundation/NSString.h" #import "Foundation/NSAttributedString.h" #import "Foundation/NSPersonNameComponents.h" #import "Foundation/NSPersonNameComponentsFormatter.h" @implementation NSPersonNameComponentsFormatter - (instancetype) init { self = [super init]; if(self != nil) { _phonetic = NO; _style = NSPersonNameComponentsFormatterStyleDefault; _nameOptions = 0L; } return self; } - (void) _setNameOptions: (NSPersonNameComponentsFormatterOptions)opts { _nameOptions = opts; } // Designated init... + (NSString *) localizedStringFromPersonNameComponents: (NSPersonNameComponents *)components style: (NSPersonNameComponentsFormatterStyle)nameFormatStyle options: (NSPersonNameComponentsFormatterOptions)nameOptions { NSPersonNameComponentsFormatter *fmt = [[NSPersonNameComponentsFormatter alloc] init]; [fmt setStyle: nameFormatStyle]; [fmt _setNameOptions: nameOptions]; return [fmt stringForObjectValue: components] ; } // Setters - (NSPersonNameComponentsFormatterStyle) style { return _style; } - (void) setStyle: (NSPersonNameComponentsFormatterStyle)style { _style = style; } - (BOOL) isPhonetic { return _phonetic; } - (void) setPhonetic: (BOOL)flag { _phonetic = flag; } // Convenience methods... - (NSString *) stringFromPersonNameComponents: (NSPersonNameComponents *)components { NSString *result = @""; switch (_style) { case NSPersonNameComponentsFormatterStyleDefault: case NSPersonNameComponentsFormatterStyleMedium: result = [result stringByAppendingString: [components givenName]]; result = [result stringByAppendingString: @" "]; result = [result stringByAppendingString: [components familyName]]; break; case NSPersonNameComponentsFormatterStyleShort: result = [result stringByAppendingString: [components givenName]]; break; case NSPersonNameComponentsFormatterStyleLong: result = [result stringByAppendingString: [components namePrefix]]; result = [result stringByAppendingString: @" "]; result = [result stringByAppendingString: [components givenName]]; result = [result stringByAppendingString: @" "]; result = [result stringByAppendingString: [components familyName]]; result = [result stringByAppendingString: @" "]; result = [result stringByAppendingString: [components nameSuffix]]; break; case NSPersonNameComponentsFormatterStyleAbbreviated: result = [result stringByAppendingString: [[components givenName] substringToIndex: 1]]; result = [result stringByAppendingString: [[components familyName] substringToIndex: 1]]; break; } return result; } - (NSAttributedString *) annotatedStringFromPersonNameComponents: (NSPersonNameComponents *)components { NSAttributedString *result = AUTORELEASE([[NSAttributedString alloc] initWithString: [self stringFromPersonNameComponents: components]]); return result; } - (NSPersonNameComponents *) personNameComponentsFromString: (NSString *)string { NSPersonNameComponents *pnc = AUTORELEASE([[NSPersonNameComponents alloc] init]); return pnc; } - (BOOL) getObjectValue: (id *)obj forString: (NSString *)string errorDescription: (NSString **)error { return NO; } - (NSString *)stringForObjectValue: (id)obj { NSPersonNameComponents *pnc = (NSPersonNameComponents *)obj; return [self stringFromPersonNameComponents: pnc]; } @end // components for attributed strings; NSString * const NSPersonNameComponentKey = @"NSPersonNameComponentKey"; NSString * const NSPersonNameComponentGivenName = @"NSPersonNameComponentGivenName"; NSString * const NSPersonNameComponentFamilyName = @"NSPersonNameComponentFamilyName"; NSString * const NSPersonNameComponentMiddleName = @"NSPersonNameComponentMiddleName"; NSString * const NSPersonNameComponentPrefix = @"NSPersonNameComponentPrefix"; NSString * const NSPersonNameComponentSuffix = @"NSPersonNameComponentSuffix"; NSString * const NSPersonNameComponentNickname = @"NSPersonNameComponentNickname"; NSString * const NSPersonNameComponentDelimiter = @"NSPersonNameComponentDelimiter";