forked from dgrijalva/gitx
-
Notifications
You must be signed in to change notification settings - Fork 76
/
NSString_Truncate.m
69 lines (61 loc) · 2.73 KB
/
NSString_Truncate.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//
// 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