// // NSString_Truncate.m // GitX // // Created by Andre Berg on 24.03.10. // Copyright 2010 Berg Media. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #import "NSString_Truncate.h" @implementation NSString (PBGitXTruncateExtensions) - (NSString *) truncateToLength:(NSUInteger)targetLength mode:(PBNSStringTruncateMode)mode indicator:(NSString *)indicatorString { NSString * res = nil; NSString * firstPart; NSString * lastPart; if (!indicatorString) { indicatorString = @"..."; } NSUInteger stringLength = [self length]; NSUInteger ilength = [indicatorString length]; if (stringLength <= targetLength) { return self; } else if (stringLength <= 0 || (!self)) { return nil; } else { switch (mode) { case PBNSStringTruncateModeCenter: firstPart = [self substringToIndex:(targetLength/2)]; lastPart = [self substringFromIndex:(stringLength-((targetLength/2))+ilength)]; res = [NSString stringWithFormat:@"%@%@%@", firstPart, indicatorString, lastPart]; break; case PBNSStringTruncateModeStart: res = [NSString stringWithFormat:@"%@%@", indicatorString, [self substringFromIndex:((stringLength-targetLength)+ilength)]]; break; case PBNSStringTruncateModeEnd: res = [NSString stringWithFormat:@"%@%@", [self substringToIndex:(targetLength-ilength)], indicatorString]; break; default: ; NSException * myException = [NSException exceptionWithName:NSInvalidArgumentException reason:[NSString stringWithFormat: @"[%@ %s] called with nonsensical value for 'mode' (mode = %d) ***", [self class], _cmd, mode] userInfo:nil]; @throw myException; return res; break; }; } return res; } @end