Revision: 28204
http://sourceforge.net/p/bibdesk/svn/28204
Author: hofman
Date: 2023-04-06 09:18:12 +0000 (Thu, 06 Apr 2023)
Log Message:
-----------
compare font weight rather than font
Modified Paths:
--------------
trunk/bibdesk/BibDocument_Actions.m
trunk/bibdesk/NSFont_BDSKExtensions.m
Modified: trunk/bibdesk/BibDocument_Actions.m
===================================================================
--- trunk/bibdesk/BibDocument_Actions.m 2023-04-03 21:55:20 UTC (rev 28203)
+++ trunk/bibdesk/BibDocument_Actions.m 2023-04-06 09:18:12 UTC (rev 28204)
@@ -98,6 +98,29 @@
#define BDSKLyXPipePathKey @"BDSKLyXPipePath"
+@interface BDSKJournalName : NSObject {
+ NSString *name;
+ NSString *abbreviatedName;
+ NSString *dotlessAbbreviatedName;
+}
+- (id)initWithName:(NSString *)aName abbreviatedName:(NSString
*)anAbbreviatedName;
+- (id)initWithDictionary:(NSDictionary *)dictionary;
+@property (nonatomic, readonly) NSString *name;
+@property (nonatomic, readonly) NSString *abbreviatedName;
+@property (nonatomic, readonly) NSString *dotlessAbbreviatedName;
+@property (nonatomic, readonly) NSDictionary *dictionaryValue;
+- (BOOL)isMatchedBy:(NSString *)name;
+@end
+
+@interface BDSKJournalNameManager : NSObject {
+ NSMutableArray *journalNames;
+}
++ (BDSKJournalNameManager *)sharedManager;
+@property (nonatomic, readonly) NSArray *journalNames;
+- (void)loadNames;
+- (BDSKJournalName *)journalNameForName:(NSString *)name;
+@end
+
@implementation BibDocument (Actions)
#pragma mark -
@@ -1665,6 +1688,38 @@
}];
}
+- (IBAction)normalizeJournalNames:(id)sender {
+ if ([self numberOfSelectedPubs] == 0 ||
+ [self displaysFileSearch] == NSMixedState ||
+ [self hasGroupTypeSelected:BDSKExternalGroupType] ||
+ [self commitPendingEdits] == NO) {
+ NSBeep();
+ return;
+ }
+
+ BDSKJournalNameManager *journalNames = [BDSKJournalNameManager
sharedManager];
+ NSInteger type = [sender tag];
+ BOOL didChange = NO;
+ NSMutableSet *unknownJournals = [NSMutableSet set];
+
+ for (BibItem *pub in [self selectedPublications]) {
+ NSString *journal = [pub valueOfField:BDSKJournalString inherit:NO];
+ if ([NSString isEmptyString:journal]) continue;
+
+ BDSKJournalName *journalName = [journalNames
journalNameForName:journal];
+ if (journalName == nil) {
+ [unknownJournals addObject:journalName];
+ continue;
+ }
+
+ NSString *newJournal = type == 0 ? [journalName name] : type == 1 ?
[journalName abbreviatedName] : [journalName dotlessAbbreviatedName];
+ if ([journal isEqualToString:newJournal]) continue;
+
+ [pub setField:BDSKJournalString toValue:newJournal];
+ didChange = YES;
+ }
+}
+
#pragma mark Duplicate and Incomplete searching
// select duplicates, then allow user to delete/copy/whatever
@@ -1841,3 +1896,115 @@
}
@end
+
+
+@implementation BDSKJournalName
+
+@synthesize name, abbreviatedName, dotlessAbbreviatedName;
+@dynamic dictionaryValue;
+
+- (id)initWithName:(NSString *)aName abbreviatedName:(NSString
*)anAbbreviatedName {
+ self = [super init];
+ if (self) {
+ name = [aName retain];
+ abbreviatedName = [anAbbreviatedName retain];
+ dotlessAbbreviatedName = [[abbreviatedName
stringByDeletingCharactersInSet:[NSCharacterSet
characterSetWithCharactersInString:@"."]] retain];
+ }
+ return self;
+}
+
+- (id)initWithDictionary:(NSDictionary *)dictionary {
+ return [self initWithName:[dictionary objectForKey:@"name"]
abbreviatedName:[dictionary objectForKey:@"abbreviated"]];
+}
+
+- (void)dealloc {
+ BDSKDESTROY(name);
+ BDSKDESTROY(abbreviatedName);
+ BDSKDESTROY(dotlessAbbreviatedName);
+ [super dealloc];
+}
+
+- (BOOL)isEqual:(id)other {
+ if (self == other)
+ return YES;
+ if (NO == [other isKindOfClass:[self class]])
+ return NO;
+ return [name isEqualToString:[(BDSKJournalName *)other name]] &&
[abbreviatedName isEqualToString:[other abbreviatedName]];
+}
+
+- (NSUInteger)hash {
+ return [name hash];
+}
+
+- (NSDictionary *)dictionaryValue {
+ return [NSDictionary dictionaryWithObjectsAndKeys:name, @"name",
abbreviatedName, @"abbreviated", nil];
+}
+
+- (BOOL)isMatchedBy:(NSString *)aName {
+ return [aName isCaseInsensitiveEqual:[self name]] || [aName
isCaseInsensitiveEqual:[self abbreviatedName]] || [aName
isCaseInsensitiveEqual:[self dotlessAbbreviatedName]];
+}
+
+@end
+
+@implementation BDSKJournalNameManager
+
+@synthesize journalNames;
+
++ (BDSKJournalNameManager *)sharedManager {
+ static BDSKJournalNameManager *sharedManager = nil;
+ if (sharedManager == nil)
+ sharedManager = [[BDSKJournalNameManager alloc] init];
+ return sharedManager;
+}
+
+- (id)init {
+ self = [super init];
+ if (self) {
+ journalNames = [[NSMutableArray alloc] init];
+ [self loadNames];
+ }
+ return nil;
+}
+
+- (void)dealloc {
+ BDSKDESTROY(journalNames);
+ [super dealloc];
+}
+
+- (void)loadNames {
+ NSURL *namesURL = [[NSBundle mainBundle]
URLForResource:@"JournalNames.plist" withExtension:nil];
+ NSArray *nameDicts = [NSArray arrayWithContentsOfURL:namesURL];
+ NSMutableArray *names = [NSMutableArray array];
+
+ [journalNames removeAllObjects];
+ for (NSDictionary *dict in nameDicts) {
+ BDSKJournalName *journal = [[BDSKJournalName alloc]
initWithDictionary:dict];
+ [journalNames addObject:journal];
+ [names addObject:[[journal name] lowercaseString]];
+ [journal release];
+ }
+
+ namesURL = [[[NSFileManager defaultManager]
applicationSupportDirectoryURL]
URLByAppendingPathComponent:@"JournalNames.plist" isDirectory:NO];
+ if ([namesURL checkResourceIsReachableAndReturnError:NULL]) {
+ nameDicts = [NSArray arrayWithContentsOfURL:namesURL];
+ for (NSDictionary *dict in nameDicts) {
+ BDSKJournalName *journal = [[BDSKJournalName alloc]
initWithDictionary:dict];
+ NSUInteger i = [names indexOfObject:[[journal name]
lowercaseString]];
+ if (i == NSNotFound)
+ [journalNames addObject:journal];
+ else
+ [journalNames replaceObjectAtIndex:i withObject:journal];
+ [journal release];
+ }
+ }
+}
+
+- (BDSKJournalName *)journalNameForName:(NSString *)name {
+ for (BDSKJournalName *journalName in journalNames) {
+ if ([journalName isMatchedBy:name])
+ return journalName;
+ }
+ return nil;
+}
+
+@end
Modified: trunk/bibdesk/NSFont_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSFont_BDSKExtensions.m 2023-04-03 21:55:20 UTC (rev
28203)
+++ trunk/bibdesk/NSFont_BDSKExtensions.m 2023-04-06 09:18:12 UTC (rev
28204)
@@ -210,9 +210,10 @@
while (weight < 8) {
NSFont *bolderFont = [fm convertWeight:YES ofFont:font];
NSInteger bolderWeight = [fm weightOfFont:bolderFont];
- if (bolderWeight > 9 || [font isEqual:bolderFont])
+ if (bolderWeight > 9 || bolderWeight == weight)
break;
font = bolderFont;
+ weight = bolderWeight;
}
if (demiFonts == nil)
demiFonts = [[NSMutableDictionary alloc] init];
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit