-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRegExCapture.m
139 lines (106 loc) · 3.38 KB
/
RegExCapture.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//
// RegExCapture.m
// RegExhibit
//
// Copyright 2007 Roger Jolly. All rights reserved.
//
// A RegExCapture object holds all the information needed to describe a capture inside a match made by a regular expression.
// The object is really a container that points towards a RegExText object which holds the beginning and ending positions of the capture.
//
#import "RegExCapture.h"
int const showLengthCapture = 20;
@implementation RegExCapture
#pragma mark-
#pragma mark Initialisation
- (id) init {
self = [super init];
if (self != nil) {
capturedText = [[RegExText alloc]init];
[self setCaptureNumber: -1];
}
return self;
}
- (id) initCaptureNumber: (int) aNumber beginPosition: (int) beginPosition endPosition: (int) endPosition {
self = [super init];
if (self != nil) {
capturedText = [[RegExText alloc]init];
[self setCaptureNumber: aNumber];
[self setBeginPosition: beginPosition endPosition: endPosition];
}
return self;
}
#pragma mark-
#pragma mark Accessors
- (void) setBeginPosition: (int) beginPosition {
[capturedText setBeginPosition: beginPosition];
}
- (int) beginPosition {
return [capturedText beginPosition];
}
- (void) setEndPosition: (int) endPosition {
[capturedText setEndPosition: endPosition];
}
- (int) endPosition {
return [capturedText endPosition];
}
- (void) setBeginPosition: (int) beginPosition endPosition: (int) endPosition {
[self setBeginPosition: beginPosition];
[self setEndPosition: endPosition];
}
- (void) setCaptureNumber: (int) aNumber {
captureNumber = aNumber;
}
- (int) captureNumber {
return captureNumber;
}
- (NSString *) matchedTextWithSource: (NSString *) sourceText {
NSString *returnString;
if ([self beginPosition] != -1) {
returnString = [[NSString alloc]initWithString: [sourceText substringWithRange: [self range]]];
} else { // Capture is undefined in Perl
returnString = [[NSString alloc]initWithString: @"\0"];
}
[returnString autorelease];
return returnString;
}
#pragma mark-
#pragma mark Other methods
- (NSString *) displayInOutlineWithSource: (NSString *) sourceText {
// Use when object is to be called from a NSOutlineView-datasource.
NSString *returnString;
NSMutableString *tempString = [NSMutableString string];
if ([self beginPosition] != -1) {
[tempString appendFormat: NSLocalizedString(@"Capturenumber&positions", nil), [self captureNumber], [self beginPosition], [self endPosition]];
if (([self endPosition] - [self beginPosition]) <= showLengthCapture) {
[tempString appendFormat: @"%@)", [sourceText substringWithRange: [self range]]];
} else {
[tempString appendFormat: @"%@ ...)", [sourceText substringWithRange:NSMakeRange([self beginPosition],showLengthCapture)]];
}
} else { // Capture is undefined in Perl
[tempString appendFormat: NSLocalizedString(@"Capture undefined", nil), [self captureNumber]];
}
returnString = [[NSString alloc] initWithString: tempString];
[returnString autorelease];
return returnString;
}
- (int) numberOfChildrenShowingReplacements: (BOOL) showReplacements {
// Use when object is to be called from a NSOutlineView-datasource.
if ([self beginPosition] != -1) {
return 1;
} else {
return 0;
}
}
- (id) child: (int) index {
return capturedText;
}
- (NSRange) range {
return [capturedText range];
}
#pragma mark-
#pragma mark Cleaning up
- (void) dealloc {
[capturedText release];
[super dealloc];
}
@end