diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 2617b136..b3f26524 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -43,7 +43,6 @@ 4C2E382316D1421B00037A9D /* MPIconHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2E382216D1421B00037A9D /* MPIconHelper.m */; }; 4C2E382616D1470200037A9D /* MPViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2E382516D1470200037A9D /* MPViewController.m */; }; 4C32B0E71A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B0E61A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m */; }; - 4C34BF541FB20D09002384CB /* MPToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C34BF531FB20D09002384CB /* MPToken.m */; }; 4C3666411787327E00B249F1 /* MPDocument+Attachments.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3666401787327E00B249F1 /* MPDocument+Attachments.m */; }; 4C37A84015B8B474005EF8EE /* MPOutlineDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C37A83F15B8B474005EF8EE /* MPOutlineDataSource.m */; }; 4C3826721AD04B51007D7D67 /* addFolderTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C3826711AD04B51007D7D67 /* addFolderTemplate.pdf */; }; @@ -96,7 +95,6 @@ 4C3B42871F935316007B04FD /* MPDayCountFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3B42861F935316007B04FD /* MPDayCountFormatter.m */; }; 4C3BD51516D276F800389F1F /* MPToolbarDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3BD51416D276F800389F1F /* MPToolbarDelegate.m */; }; 4C3C4EAF18D7039300153127 /* MPValueTransformerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */; }; - 4C40DDBC1FB219EF00E0B2F6 /* MPTestToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C40DDBB1FB219EF00E0B2F6 /* MPTestToken.m */; }; 4C431BCD16E2A82800700A81 /* MPPasteBoardController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C431BCC16E2A82700700A81 /* MPPasteBoardController.m */; }; 4C431BCF16E2BAB000700A81 /* OverlayWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C431BCE16E2BAB000700A81 /* OverlayWindow.xib */; }; 4C45FB1D178E09ED0010007D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C77E36615B84A240093A587 /* Cocoa.framework */; }; @@ -365,8 +363,6 @@ 4C2E382516D1470200037A9D /* MPViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPViewController.m; sourceTree = ""; }; 4C32B0E51A1D4436007E12F1 /* KPKFormat+MPUTIDetection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KPKFormat+MPUTIDetection.h"; sourceTree = ""; }; 4C32B0E61A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KPKFormat+MPUTIDetection.m"; sourceTree = ""; }; - 4C34BF521FB20D09002384CB /* MPToken.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPToken.h; sourceTree = ""; }; - 4C34BF531FB20D09002384CB /* MPToken.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPToken.m; sourceTree = ""; }; 4C3666401787327E00B249F1 /* MPDocument+Attachments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Attachments.m"; sourceTree = ""; }; 4C37A83E15B8B474005EF8EE /* MPOutlineDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineDataSource.h; sourceTree = ""; }; 4C37A83F15B8B474005EF8EE /* MPOutlineDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOutlineDataSource.m; sourceTree = ""; }; @@ -423,7 +419,6 @@ 4C3BD51416D276F800389F1F /* MPToolbarDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPToolbarDelegate.m; sourceTree = ""; }; 4C3C4EAD18D7039300153127 /* MPValueTransformerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPValueTransformerHelper.h; sourceTree = ""; }; 4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPValueTransformerHelper.m; sourceTree = ""; }; - 4C40DDBB1FB219EF00E0B2F6 /* MPTestToken.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTestToken.m; sourceTree = ""; }; 4C4161021F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/DatabaseSettingsWindow.strings; sourceTree = ""; }; 4C4161031F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PasswordEditWindow.strings; sourceTree = ""; }; 4C4161041F50333B003BC0AF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/GeneralSettings.strings; sourceTree = ""; }; @@ -1093,7 +1088,6 @@ 4C45FB2F178E0CE20010007D /* MPTestDocument.m */, 4C6BC65F1A36717E00BDDF3D /* MPDatabaseSearch.m */, 4C8030491E2FBAA300133E4C /* MPTestKeyMapper.m */, - 4C40DDBB1FB219EF00E0B2F6 /* MPTestToken.m */, 4C45FB1F178E09ED0010007D /* Supporting Files */, ); path = MacPassTests; @@ -1369,8 +1363,6 @@ 4CA3530A18A53CB800839B0F /* MPKeyMapper.m */, 4C1F7FA01E3A12E600D6A40E /* MPModifiedKey.h */, 4C1F7FA11E3A12E600D6A40E /* MPModifiedKey.m */, - 4C34BF521FB20D09002384CB /* MPToken.h */, - 4C34BF531FB20D09002384CB /* MPToken.m */, ); name = Autotype; sourceTree = ""; @@ -1800,7 +1792,6 @@ 4C8DEAA21C314D2C00D24C32 /* MPTestAutotypeDelay.m in Sources */, 4C45FB30178E0CE20010007D /* MPTestDocument.m in Sources */, 4C6BC6601A36717E00BDDF3D /* MPDatabaseSearch.m in Sources */, - 4C40DDBC1FB219EF00E0B2F6 /* MPTestToken.m in Sources */, 4C10207F1B750E2F00BFCD59 /* MPTestAutotype.m in Sources */, 4C80304A1E2FBAA300133E4C /* MPTestKeyMapper.m in Sources */, ); @@ -1865,7 +1856,6 @@ 4C88C66918D9F8D600F43852 /* MPTemporaryFileStorageCenter.m in Sources */, 4C7B63741C0CB51F00D7038C /* TTTDateTransformers.m in Sources */, 4CF5BE6D1BF33E3000048505 /* NSApplication+MPAdditions.m in Sources */, - 4C34BF541FB20D09002384CB /* MPToken.m in Sources */, 4CE30ACC1A312B7F0063FCC6 /* MPReferenceBuilderViewController.m in Sources */, 4C6F228C19A4AA700012310C /* MPAutotypeDelay.m in Sources */, 4C3C4EAF18D7039300153127 /* MPValueTransformerHelper.m in Sources */, diff --git a/MacPass/MPAutotypeBuilderViewController.m b/MacPass/MPAutotypeBuilderViewController.m index 800526af..e3383043 100644 --- a/MacPass/MPAutotypeBuilderViewController.m +++ b/MacPass/MPAutotypeBuilderViewController.m @@ -109,10 +109,10 @@ - (NSTokenStyle)tokenField:(NSTokenField *)tokenField styleForRepresentedObject:(id)representedObject { if(tokenField == self.availableCommandsTokenField) { - return NSTokenStyleDefault; + return NSTokenStyleSquared; } if([representedObject hasPrefix:@"{"] || [representedObject hasSuffix:@"}"]) { - return NSTokenStyleDefault; + return NSTokenStyleSquared; } return NSTokenStyleNone; } diff --git a/MacPass/MPToken.h b/MacPass/MPToken.h deleted file mode 100644 index cddd50d6..00000000 --- a/MacPass/MPToken.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPToken.h -// MacPass -// -// Created by Michael Starke on 07.11.17. -// Copyright © 2017 HicknHack Software GmbH. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MPToken : NSObject - -@property (readonly, copy) NSString *value; - -+ (NSArray *)tokenizeString:(NSString *)string; -- (instancetype)initWithValue:(NSString *)value NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MacPass/MPToken.m b/MacPass/MPToken.m deleted file mode 100644 index cb9be4f3..00000000 --- a/MacPass/MPToken.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// MPToken.m -// MacPass -// -// Created by Michael Starke on 07.11.17. -// Copyright © 2017 HicknHack Software GmbH. All rights reserved. -// - -#import "MPToken.h" - -#import -#import - -@interface NSString (MPTokenExtension) -@property (nonatomic, readonly) BOOL isOpenCurlyBraket; -@property (nonatomic, readonly) BOOL isClosingCurlyBraket; -@end - -@implementation NSString (MPTokenExtension) - -- (BOOL)isOpenCurlyBraket { - return [self isEqualToString:@"{"]; -} - -- (BOOL)isClosingCurlyBraket { - return [self isEqualToString:@"}"]; -} - -@end - -@interface MPToken () - -@property (copy) NSString *value; - -@end - -typedef NS_ENUM(NSInteger, MPTokenizeState) { - MPTokenizeStateNormal, - MPTokenizeStateCompoundToken, - MPTokenizerStateError -}; - -@implementation MPToken - -/** - * Mapping for modifier to CGEventFlags. - * - * @return dictionary with commands as keys and CGEventFlags as wrapped values - */ -+ (NSDictionary *)_modifierCommands { - static NSDictionary *modifierCommands; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - modifierCommands = @{ - kKPKAutotypeAlt : @(kCGEventFlagMaskAlternate), - kKPKAutotypeControl : @(kCGEventFlagMaskControl), - kKPKAutotypeShift : @(kCGEventFlagMaskShift) - }; - }); - return modifierCommands; -} - -+ (NSArray *)tokenizeString:(NSString *)string { - if(!string) { - return nil; - } - __block NSMutableString *tokenValue = [[NSMutableString alloc] init]; - __block MPTokenizeState state = MPTokenizeStateNormal; - __block NSMutableArray *tokens = [[NSMutableArray alloc] initWithCapacity:MAX(1,string.length)]; - [string enumerateSubstringsInRange:NSMakeRange(0, string.length) - options:NSStringEnumerationByComposedCharacterSequences - usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) { - switch(state) { - case MPTokenizeStateNormal: { - if(substring.isOpenCurlyBraket) { - [tokenValue setString:@"{"]; - state = MPTokenizeStateCompoundToken; - } - else if(substring.isClosingCurlyBraket) { - state = MPTokenizerStateError; - } - else { - MPToken *token = [[MPToken alloc] initWithValue:substring]; - if(token) { - [tokens addObject:token]; - } - else { - state = MPTokenizerStateError; - } - } - break; - } - case MPTokenizeStateCompoundToken: { - if(substring.isOpenCurlyBraket) { - state = MPTokenizerStateError; - } - else if(substring.isClosingCurlyBraket) { - state = MPTokenizeStateNormal; - [tokenValue appendString:@"}"]; - MPToken *token = [[MPToken alloc] initWithValue:tokenValue]; - if(token) { - [tokens addObject:token]; - } - else { - state = MPTokenizerStateError; - } - /* clear tokenvalue */ - [tokenValue setString:@""]; - } - else { - [tokenValue appendString:substring]; - } - break; - } - case MPTokenizerStateError: - default: - state = MPTokenizerStateError; - *stop = YES; - break; - } - }]; - return [tokens copy]; -} - -- (instancetype)init { - self = [self initWithValue:@""]; - return self; -} - -- (instancetype)initWithValue:(NSString *)value { - if(!value) { - [[NSException exceptionWithName:NSInvalidArgumentException reason:@"Token vale cannot be nil!" userInfo:nil] raise]; - self = nil; - return self; - } - self = [super init]; - if(self) { - _value = [value copy]; - } - return self; -} - -- (NSString *)description { - return self.value.description; -} - -@end diff --git a/MacPassTests/MPTestToken.m b/MacPassTests/MPTestToken.m deleted file mode 100644 index 90a22946..00000000 --- a/MacPassTests/MPTestToken.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// MPTestToken.m -// MacPassTests -// -// Created by Michael Starke on 07.11.17. -// Copyright © 2017 HicknHack Software GmbH. All rights reserved. -// - -#import -#import "MPToken.h" - -@interface MPTestToken : XCTestCase - -@end - -@implementation MPTestToken - -- (void)setUp { - [super setUp]; -} - -- (void)tearDown { - [super tearDown]; -} - -- (void)testTokenizing { - NSArray *tokens = [MPToken tokenizeString:@"{^}{USERNAME}^S+H{SPACE}"]; - XCTAssertEqual(7, tokens.count); - - XCTAssertEqual(7, tokens.count); - XCTAssertEqualObjects(@"{^}", tokens[0].value); - XCTAssertEqualObjects(@"{USERNAME}", tokens[1].value); - XCTAssertEqualObjects(@"^", tokens[2].value); - XCTAssertEqualObjects(@"S", tokens[3].value); - XCTAssertEqualObjects(@"+", tokens[4].value); - XCTAssertEqualObjects(@"H", tokens[5].value); - XCTAssertEqualObjects(@"{SPACE}", tokens[6].value); - - tokens = [MPToken tokenizeString:@"{^}{USERNAME 2}^S+H{SPACE 2}"]; - XCTAssertEqual(7, tokens.count); - XCTAssertEqualObjects(@"{^}", tokens[0].value); - XCTAssertEqualObjects(@"{USERNAME 2}", tokens[1].value); - XCTAssertEqualObjects(@"^", tokens[2].value); - XCTAssertEqualObjects(@"S", tokens[3].value); - XCTAssertEqualObjects(@"+", tokens[4].value); - XCTAssertEqualObjects(@"H", tokens[5].value); - XCTAssertEqualObjects(@"{SPACE 2}", tokens[6].value); -} - - -@end