add swift support

This commit is contained in:
Zitao Xiong
2015-04-04 23:10:52 -04:00
parent f105e14935
commit 8c02033fc6
2 changed files with 47 additions and 9 deletions

View File

@@ -117,7 +117,7 @@
09F6562A174041010000486B /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0460;
LastUpgradeCheck = 0620;
ORGANIZATIONNAME = nanaimostudio;
};
buildConfigurationList = 09F6562D174041010000486B /* Build configuration list for PBXProject "QuickLocalization" */;
@@ -177,7 +177,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_WARN_CONSTANT_CONVERSION = YES;
@@ -209,7 +208,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_WARN_CONSTANT_CONVERSION = YES;

View File

@@ -17,14 +17,18 @@ static NSString *localizeRegexs[] = {
@"NSLocalizedStringWithDefaultValue\\s*\\(\\s*@\"(.*)\"\\s*,\\s*(.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\s*\\)"
};
static NSString *stringRegexs = @"@\"[^\"]*\"";
static NSString *objcStringRegexs = @"@\"[^\"]*\"";
static NSString *swiftStringRegexs = @"\"[^\"]*\"";
static NSString * const QLShouldUseNilForComment = @"QLShouldUseNilForComment";
static NSString * const QLShouldUseSnippetForComment = @"QLShouldUseSnippetForComment";
static NSString * const QLShouldUseSwiftSyntax = @"QLShouldUseSwiftSyntax";
@interface QuickLocalization ()
@property (nonatomic, assign) BOOL shouldUseNilForComment;
@property (nonatomic, assign) BOOL shouldUseSnippetForComment;
@property (nonatomic, assign) BOOL shouldUseSwiftSyntax;
@end
@@ -56,10 +60,14 @@ static id sharedPlugin = nil;
NSMenuItem *snippetToggle = [[NSMenuItem alloc] initWithTitle:@"Use <# comments #> for NSLocalizedString comment" action:@selector(toggleSnippetOption) keyEquivalent:@""];
[snippetToggle setTarget:self];
NSMenuItem *swiftSyntax = [[NSMenuItem alloc] initWithTitle:@"Swift Localization" action:@selector(toggleSwiftOption) keyEquivalent:@""];
[swiftSyntax setTarget:self];
NSMenu *groupMenu = [[NSMenu alloc] initWithTitle:@"Quick Localization"];
[groupMenu addItem:localization];
[groupMenu addItem:nilToggle];
[groupMenu addItem:snippetToggle];
[groupMenu addItem:swiftSyntax];
NSMenuItem *groupMenuItem = [[NSMenuItem alloc] initWithTitle:@"Quick Localization" action:NULL keyEquivalent:@""];
[[viewMenuItem submenu] addItem:groupMenuItem];
@@ -87,7 +95,7 @@ static id sharedPlugin = nil;
NSRegularExpression *localizedRex = [[NSRegularExpression alloc] initWithPattern:localizeRegexs[0] options:NSRegularExpressionCaseInsensitive error:nil];
NSArray *localizedMatches = [localizedRex matchesInString:line options:0 range:NSMakeRange(0, [line length])];
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:stringRegexs options:NSRegularExpressionCaseInsensitive error:nil];
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:[self currentStringRegexs] options:NSRegularExpressionCaseInsensitive error:nil];
NSArray *matches = [regex matchesInString:line options:0 range:NSMakeRange(0, [line length])];
NSUInteger addedLength = 0;
for (int i = 0; i < [matches count]; i++) {
@@ -100,15 +108,22 @@ static id sharedPlugin = nil;
NSString *string = [line substringWithRange:matchedRangeInLine];
// NSLog(@"string index:%d, %@", i, string);
NSString *outputString;
NSString *swiftAddtion = self.shouldUseSwiftSyntax ? @"comment: " : @"";
if ([self shouldUseNilForComment]) {
outputString = [NSString stringWithFormat:@"NSLocalizedString(%@, nil)", string];
if (self.shouldUseSwiftSyntax) {
outputString = [NSString stringWithFormat:@"NSLocalizedString(%@, comment: \"\")", string];
}
else {
outputString = [NSString stringWithFormat:@"NSLocalizedString(%@, nil)", string];
}
}
else if ([self shouldUseSnippetForComment]) {
outputString = [NSString stringWithFormat:@"NSLocalizedString(%@, <# comments #>)", string];
outputString = [NSString stringWithFormat:@"NSLocalizedString(%@, %@<# comments #>)", string, swiftAddtion];
}
else {
outputString = [NSString stringWithFormat:@"NSLocalizedString(%@, %@)", string, string];
outputString = [NSString stringWithFormat:@"NSLocalizedString(%@, %@%@)", string, swiftAddtion ,string];
}
addedLength = addedLength + outputString.length - string.length;
@@ -125,6 +140,15 @@ static id sharedPlugin = nil;
}
}
- (NSString *)currentStringRegexs {
if (self.shouldUseSwiftSyntax) {
return swiftStringRegexs;
}
else {
return objcStringRegexs;
}
}
- (BOOL)isRange:(NSRange)range inSkipedRanges:(NSArray *)ranges {
for (int i = 0; i < [ranges count]; i++) {
NSTextCheckingResult *result = [ranges objectAtIndex:i];
@@ -137,7 +161,8 @@ static id sharedPlugin = nil;
}
- (void)toggleNilOption {
[self setShouldUseNilForComment:![self shouldUseNilForComment]];
self.shouldUseNilForComment = !self.shouldUseNilForComment;
if (self.shouldUseNilForComment) {
self.shouldUseSnippetForComment = NO;
}
@@ -150,6 +175,10 @@ static id sharedPlugin = nil;
}
}
- (void)toggleSwiftOption {
self.shouldUseSwiftSyntax = !self.shouldUseSwiftSyntax;
}
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
if ([menuItem action] == @selector(toggleNilOption)) {
[menuItem setState:[self shouldUseNilForComment] ? NSOnState : NSOffState];
@@ -157,6 +186,9 @@ static id sharedPlugin = nil;
else if ([menuItem action] == @selector(toggleSnippetOption)) {
[menuItem setState:[self shouldUseSnippetForComment] ? NSOnState : NSOffState];
}
else if ([menuItem action] == @selector(toggleSwiftOption)) {
[menuItem setState:[self shouldUseSwiftSyntax] ? NSOnState : NSOffState];
}
return YES;
}
@@ -177,4 +209,12 @@ static id sharedPlugin = nil;
- (void)setShouldUseSnippetForComment:(BOOL)shouldUseSnippetForComment {
[[NSUserDefaults standardUserDefaults] setBool:shouldUseSnippetForComment forKey:QLShouldUseSnippetForComment];
}
- (BOOL)shouldUseSwiftSyntax {
return [[NSUserDefaults standardUserDefaults] boolForKey:QLShouldUseSwiftSyntax];
}
- (void)setShouldUseSwiftSyntax:(BOOL)shouldUseSwiftSyntax {
[[NSUserDefaults standardUserDefaults] setBool:shouldUseSwiftSyntax forKey:QLShouldUseSwiftSyntax];
}
@end