diff --git a/HiperStrings/Controllers/ZFFileDetailController.m b/HiperStrings/Controllers/ZFFileDetailController.m index 6eb6cd8..b35c2d3 100644 --- a/HiperStrings/Controllers/ZFFileDetailController.m +++ b/HiperStrings/Controllers/ZFFileDetailController.m @@ -28,7 +28,6 @@ - (void)setLangFile:(ZFTranslationFile *)langFile { self.columns = [[NSArray arrayWithObject:KEY_KEY] arrayByAddingObjectsFromArray:[_langFile allLanguages]]; self.keys = (self.columns.count > 1)? [self.langFile allKeys] : [NSArray array]; - NSMutableArray *addCol = [self.columns mutableCopy]; NSArray *columns = [self.tableView.tableColumns copy]; [columns enumerateObjectsUsingBlock:^(NSTableColumn *column, NSUInteger idx, BOOL *stop) { @@ -64,11 +63,12 @@ - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { } - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { - if ([tableColumn.identifier isEqualToString:KEY_KEY]) return [self.keys objectAtIndex:row]; + NSString *key = [self.keys objectAtIndex:row]; + if ([tableColumn.identifier isEqualToString:KEY_KEY]) return key; else { NSArray *translation = [self.langFile translationsByType:(self.segmentedControl.selectedSegment == 0)? ZFLangTypeIOS : ZFLangTypeAndorid andLanguageIdentifier:tableColumn.identifier]; ZFLangFile *lang = [translation lastObject]; - return [[lang lineForKey:[self.keys objectAtIndex:row]] value]; + return [[lang lineForKey:key] value]; } //return [[self.rows objectForKey:tableColumn.identifier] objectForKey:[self.keys objectAtIndex:row]]; diff --git a/Strings/ZFLangFile.m b/Strings/ZFLangFile.m index 6f33818..f49e4db 100644 --- a/Strings/ZFLangFile.m +++ b/Strings/ZFLangFile.m @@ -49,6 +49,7 @@ - (id)initWithURL:(NSURL *)url { NSArray *translations = (isIOS)? [converter translationsForStringsAtURL:url] : [converter translationsForXMLAtURL:url]; _translations = [NSMutableArray arrayWithArray:translations]; + [self sortTranslations]; } return self; @@ -84,22 +85,14 @@ - (void)setUrl:(NSURL *)url { #pragma mark - keys -- (void)extractKeys { - _keysAndComments = [self.translations valueForKey:@"key"]; - if (!_keysAndComments) _keysAndComments = [NSArray array]; - - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (self BEGINSWITH %@)", @"*"]; - _allKeys = [self.keysAndComments filteredArrayUsingPredicate:predicate]; - if (!_allKeys) _allKeys = [NSArray array]; -} - (NSArray *)keysAndComments { - if (!_keysAndComments) [self extractKeys]; + if (!_keysAndComments) [self sortTranslations]; return _keysAndComments; } - (NSArray *)allKeys { - if (!_allKeys) [self extractKeys]; + if (!_allKeys) [self sortTranslations]; return _allKeys; } @@ -112,18 +105,35 @@ - (ZFTranslationLine *)lineForKey:(NSString *)key { - (void)addLine:(ZFTranslationLine *)line { + ZFTranslationLine *aline = [self lineForKey:line.key]; if (aline) return; [self.translations addObject:line]; _isDirty = YES; - NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"position" ascending:YES]; - [self.translations sortUsingDescriptors:@[descriptor]]; + [self sortTranslations]; +} + +- (void)sortTranslations { + if (!self.translations || self.translations.count == 0) return; + + [self.translations sortUsingComparator:^NSComparisonResult(ZFTranslationLine *obj1, ZFTranslationLine *obj2) { + if (obj1.range.location == obj2.range.location) return NSOrderedSame; + else return (obj1.range.location < obj2.range.location)? NSOrderedAscending : NSOrderedDescending; + }]; + + _keysAndComments = [self.translations valueForKey:@"key"]; + if (!_keysAndComments) _keysAndComments = [NSArray array]; + + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"type != %d", ZFTranslationLineTypeComment]; + _allKeys = [[self.translations filteredArrayUsingPredicate:predicate] valueForKey:@"key"]; + if (!_allKeys) _allKeys = [NSArray array]; + } - (NSString *)description { - return [[super description] stringByAppendingFormat:@" %@ %d %@ %ld keys", self.fileName, self.type, self.language, (unsigned long)[self.keysAndComments count]]; + return [[super description] stringByAppendingFormat:@" %@ %d %@ %ld keys", self.fileName, self.type, self.language, (unsigned long)[self.allKeys count]]; } diff --git a/Strings/ZFTranslationFile.m b/Strings/ZFTranslationFile.m index 8e79d63..8fb2269 100644 --- a/Strings/ZFTranslationFile.m +++ b/Strings/ZFTranslationFile.m @@ -210,7 +210,10 @@ - (void)fillGaps { if (iOSLangCount == 0 || androidLangCount == 0) self.conversionDriver = ZFTranslationFileConversionDriverSkip; else self.conversionDriver = (iOSLangCount >= androidLangCount)? ZFTranslationFileConversionDriverIOS : ZFTranslationFileConversionDriverAndorid; - _allKeys = [allKeys sortedArrayUsingSelector:@selector(compare:)]; + _allKeys = [allKeys sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { + return [obj1 compare:obj2]; + }]; + _allLanguages = [allLanguages sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { if ([obj1 isEqualToString:FAV_LANG]) return NSOrderedAscending; else if ([obj2 isEqualToString:FAV_LANG]) return NSOrderedDescending;