aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/SPTextView.m76
1 files changed, 41 insertions, 35 deletions
diff --git a/Source/SPTextView.m b/Source/SPTextView.m
index 523db37c..3c6d7b53 100644
--- a/Source/SPTextView.m
+++ b/Source/SPTextView.m
@@ -1552,18 +1552,20 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
NSInteger i, j, k, deltaLength;
NSRange mirroredRange;
+ SnippetControlInfo *currentSnippetRef = &snippetControlArray[currentSnippetIndex];
// Go through each defined mirrored snippet and update it
for(i=0; i<=mirroredCounter; i++) {
- if(snippetMirroredControlArray[i].snippet == currentSnippetIndex) {
+ MirrorControlInfo *mirrorRef = &snippetMirroredControlArray[i];
+ if(mirrorRef->snippet == currentSnippetIndex) {
- deltaLength = snippetControlArray[currentSnippetIndex].length-snippetMirroredControlArray[i].length;
+ deltaLength = currentSnippetRef->length - mirrorRef->length;
- mirroredRange = NSMakeRange(snippetMirroredControlArray[i].location, snippetMirroredControlArray[i].length);
+ mirroredRange = NSMakeRange(mirrorRef->location, mirrorRef->length);
NSString *mirroredString = nil;
// For safety reasons
@try{
- mirroredString = [[self string] substringWithRange:NSMakeRange(snippetControlArray[currentSnippetIndex].location, snippetControlArray[currentSnippetIndex].length)];
+ mirroredString = [[self string] substringWithRange:NSMakeRange(currentSnippetRef->location, currentSnippetRef->length)];
}
@catch(id ae) {
NSLog(@"Error while parsing for mirrored snippets. %@", [ae description]);
@@ -1576,17 +1578,17 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
[self shouldChangeTextInRange:mirroredRange replacementString:mirroredString];
[self replaceCharactersInRange:mirroredRange withString:mirroredString];
- snippetMirroredControlArray[i].length = snippetControlArray[currentSnippetIndex].length;
+ mirrorRef->length = currentSnippetRef->length;
// If a completion list is open adjust the theCharRange and theParseRange if a mirrored snippet
// was updated which is located before the initial position
- if(completionIsOpen && snippetMirroredControlArray[i].location < (NSInteger)completionParseRangeLocation)
+ if(completionIsOpen && mirrorRef->location < (NSInteger)completionParseRangeLocation)
[completionPopup adjustWorkingRangeByDelta:deltaLength];
// Adjust all other snippets accordingly
for(j=0; j<=snippetControlMax; j++) {
if(snippetControlArray[j].location > -1) {
- if(snippetControlArray[j].location+snippetControlArray[j].length>=snippetMirroredControlArray[i].location) {
+ if(snippetControlArray[j].location+snippetControlArray[j].length >= mirrorRef->location) {
snippetControlArray[j].location += deltaLength;
}
}
@@ -1594,7 +1596,7 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
// Adjust all mirrored snippets accordingly
for(k=0; k<=mirroredCounter; k++) {
if(i != k) {
- if(snippetMirroredControlArray[k].location > snippetMirroredControlArray[i].location) {
+ if(snippetMirroredControlArray[k].location > mirrorRef->location) {
snippetMirroredControlArray[k].location += deltaLength;
}
}
@@ -1630,10 +1632,11 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
return;
}
- if(currentSnippetIndex >= 0 && currentSnippetIndex < 20) {
- if(snippetControlArray[currentSnippetIndex].task == 0) {
+ if(currentSnippetIndex >= 0 && currentSnippetIndex < COUNT_OF(snippetControlArray)) {
+ SnippetControlInfo *currentSnippetRef = &snippetControlArray[currentSnippetIndex];
+ if(currentSnippetRef->task == 0) {
- NSRange r1 = NSMakeRange(snippetControlArray[currentSnippetIndex].location, snippetControlArray[currentSnippetIndex].length);
+ NSRange r1 = NSMakeRange(currentSnippetRef->location, currentSnippetRef->length);
NSRange r2;
// Ensure the selection for nested snippets if it is at very end of the text buffer
@@ -1718,7 +1721,7 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
mirroredCounter = -1;
// reset snippet array
- for(i=0; i<20; i++) {
+ for(i=0; i<COUNT_OF(snippetControlArray); i++) {
snippetControlArray[i] = (SnippetControlInfo){ -1, -1, -1};
snippetMirroredControlArray[i] = (MirrorControlInfo){-1, -1, -1};
}
@@ -1864,7 +1867,7 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
[theHintString release];
// Adjust successive snippets
- for(i=0; i<20; i++)
+ for(i=0; i<COUNT_OF(snippetControlArray); i++)
if(snippetControlArray[i].location > -1 && i != snipCnt && snippetControlArray[i].location > snippetControlArray[snipCnt].location)
snippetControlArray[i].location -= 3+((snipCnt>9)?2:1);
@@ -1873,8 +1876,8 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
// Parse for mirrored snippets
while([snip isMatchedByRegex:mirror_re]) {
mirroredCounter++;
- if(mirroredCounter > 19) {
- NSLog(@"Only 20 mirrored snippet placeholders allowed.");
+ if(mirroredCounter >= COUNT_OF(snippetMirroredControlArray)) {
+ NSLog(@"Only %lu mirrored snippet placeholders allowed.",COUNT_OF(snippetMirroredControlArray));
mirroredCounter--; //go back by one or the code below will do an out-of-bounds array access
NSBeep();
break;
@@ -1899,7 +1902,7 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
snippetMirroredControlArray[mirroredCounter].length = 0;
// Adjust successive snippets
- for(i=0; i<20; i++)
+ for(i=0; i<COUNT_OF(snippetControlArray); i++)
if(snippetControlArray[i].location > -1 && snippetControlArray[i].location > snippetMirroredControlArray[mirroredCounter].location)
snippetControlArray[i].location -= 1+((snipCnt>9)?2:1);
@@ -1909,20 +1912,22 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
// Preset mirrored snippets with according snippet content
if(mirroredCounter > -1) {
for(i=0; i<=mirroredCounter; i++) {
- if(snippetControlArray[snippetMirroredControlArray[i].snippet].location > -1 && snippetControlArray[snippetMirroredControlArray[i].snippet].length > 0) {
- NSRange copyToRange = NSMakeRange(snippetMirroredControlArray[i].location-targetRange.location, snippetMirroredControlArray[i].length);
- NSRange copyFromRange = NSMakeRange(snippetControlArray[snippetMirroredControlArray[i].snippet].location-targetRange.location, snippetControlArray[snippetMirroredControlArray[i].snippet].length);
+ MirrorControlInfo *mirrorRef = &snippetMirroredControlArray[i];
+ SnippetControlInfo *snippetRef = &snippetControlArray[mirrorRef->snippet];
+ if(snippetRef->location > -1 && snippetRef->length > 0) {
+ NSRange copyToRange = NSMakeRange(mirrorRef->location-targetRange.location, mirrorRef->length);
+ NSRange copyFromRange = NSMakeRange(snippetRef->location-targetRange.location, snippetRef->length);
[snip replaceCharactersInRange:copyToRange withString:[snip substringWithRange:copyFromRange]];
- snippetMirroredControlArray[i].length = snippetControlArray[snippetMirroredControlArray[i].snippet].length;
+ mirrorRef->length = snippetRef->length;
}
// Adjust successive snippets
- for(j=0; j<20; j++)
- if(snippetControlArray[j].location > -1 && snippetControlArray[j].location > snippetMirroredControlArray[i].location)
- snippetControlArray[j].location += snippetControlArray[snippetMirroredControlArray[i].snippet].length;
+ for(j=0; j<COUNT_OF(snippetControlArray); j++)
+ if(snippetControlArray[j].location > -1 && snippetControlArray[j].location > mirrorRef->location)
+ snippetControlArray[j].location += snippetRef->length;
// Adjust successive mirrored snippets
for(j=0; j<=mirroredCounter; j++)
- if(snippetMirroredControlArray[j].location > snippetMirroredControlArray[i].location)
- snippetMirroredControlArray[j].location += snippetControlArray[snippetMirroredControlArray[i].snippet].length;
+ if(snippetMirroredControlArray[j].location > mirrorRef->location)
+ snippetMirroredControlArray[j].location += snippetRef->length;
}
}
@@ -1976,8 +1981,8 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
if(snippetControlCounter > -1) {
// Find and select first defined snippet
currentSnippetIndex = 0;
- // Look for next defined snippet since snippet numbers must not serial like 1, 5, and 12 e.g.
- while(snippetControlArray[currentSnippetIndex].location == -1 && currentSnippetIndex < 20)
+ // Look for next defined snippet since snippet numbers might not be serial like 1, 5, and 12 e.g.
+ while(snippetControlArray[currentSnippetIndex].location == -1 && currentSnippetIndex < COUNT_OF(snippetControlArray))
currentSnippetIndex++;
[self selectCurrentSnippet];
}
@@ -2188,13 +2193,13 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
currentSnippetIndex--;
- // Look for previous defined snippet since snippet numbers must not serial like 1, 5, and 12 e.g.
+ // Look for previous defined snippet since snippet numbers might not be serial like 1, 5, and 12 e.g.
while(snippetControlArray[currentSnippetIndex].location == -1 && currentSnippetIndex > -2)
currentSnippetIndex--;
if(currentSnippetIndex < 0) {
currentSnippetIndex = 0;
- while(snippetControlArray[currentSnippetIndex].location == -1 && currentSnippetIndex < 20)
+ while(snippetControlArray[currentSnippetIndex].location == -1 && currentSnippetIndex < COUNT_OF(snippetControlArray))
currentSnippetIndex++;
NSBeep();
}
@@ -2206,8 +2211,8 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
currentSnippetIndex++;
- // Look for next defined snippet since snippet numbers must not serial like 1, 5, and 12 e.g.
- while(snippetControlArray[currentSnippetIndex].location == -1 && currentSnippetIndex < 20)
+ // Look for next defined snippet since snippet numbers might not be serial like 1, 5, and 12 e.g.
+ while(snippetControlArray[currentSnippetIndex].location == -1 && currentSnippetIndex < COUNT_OF(snippetControlArray))
currentSnippetIndex++;
if(currentSnippetIndex > snippetControlMax) { // for safety reasons
@@ -3330,8 +3335,9 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
// Re-calculate snippet ranges if snippet session is active
if(snippetControlCounter > -1 && !snippetWasJustInserted && !isProcessingMirroredSnippets) {
// Remove any fully nested snippets relative to the current snippet which was edited
- NSInteger currentSnippetLocation = snippetControlArray[currentSnippetIndex].location;
- NSInteger currentSnippetMaxRange = snippetControlArray[currentSnippetIndex].location + snippetControlArray[currentSnippetIndex].length;
+ SnippetControlInfo *currentSnippetRef = &snippetControlArray[currentSnippetIndex];
+ NSInteger currentSnippetLocation = currentSnippetRef->location;
+ NSInteger currentSnippetMaxRange = currentSnippetRef->location + currentSnippetRef->length;
NSInteger i;
for(i=0; i<snippetControlMax; i++) {
if(snippetControlArray[i].location > -1
@@ -3349,9 +3355,9 @@ static inline NSPoint SPPointOnLine(NSPoint a, NSPoint b, CGFloat t) { return NS
NSUInteger changeInLength = [textStore changeInLength];
// Adjust length change to current snippet
- snippetControlArray[currentSnippetIndex].length += changeInLength;
+ currentSnippetRef->length += changeInLength;
// If length < 0 break snippet input
- if(snippetControlArray[currentSnippetIndex].length < 0) {
+ if(currentSnippetRef->length < 0) {
[self endSnippetSession];
} else {
// Adjust start position of snippets after caret position