From 6ce815cde2a12af8c74f8575921b69faf8bea0dd Mon Sep 17 00:00:00 2001 From: zhourui05 Date: Thu, 9 Sep 2021 15:32:42 +0800 Subject: [PATCH 1/6] =?UTF-8?q?to=20ARC=E3=80=82=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DUImageView.m | 12 +- DUWindow.m | 20 +- DictUnifier.xcodeproj/project.pbxproj | 10 +- DictUnifierAppDelegate.m | 432 +++++++++++++------------- README.md | 3 + ddk/build_dict.sh | 2 +- 6 files changed, 247 insertions(+), 232 deletions(-) diff --git a/DUImageView.m b/DUImageView.m index 496aae4..e5d5dc0 100644 --- a/DUImageView.m +++ b/DUImageView.m @@ -30,13 +30,15 @@ - (BOOL) performDragOperation: (id < NSDraggingInfo >) sender NSPasteboard *pboard = [sender draggingPasteboard]; BOOL successful = NO; - if ([[pboard types] containsObject: NSPasteboardTypeFileURL]) - { - NSArray *files = [pboard propertyListForType: NSPasteboardTypeFileURL]; - [controller startConversion: [files objectAtIndex: 0]]; + if (pboard.pasteboardItems.count <= 1) { + //直接获取文件路径 + + NSString *fileURL = [[NSURL URLFromPasteboard:pboard] path]; + [controller startConversion:fileURL]; successful = NO; } - + + return successful; } diff --git a/DUWindow.m b/DUWindow.m index 31897ef..529f7ec 100644 --- a/DUWindow.m +++ b/DUWindow.m @@ -18,10 +18,10 @@ - (NSDragOperation) draggingEntered: (id < NSDraggingInfo >) sender { NSPasteboard *pboard = [sender draggingPasteboard]; NSDragOperation opType = NSDragOperationNone; - + if ([[pboard types] containsObject: NSPasteboardTypeFileURL]) opType = NSDragOperationCopy; - + return opType; } @@ -29,14 +29,18 @@ - (BOOL) performDragOperation: (id < NSDraggingInfo >) sender { NSPasteboard *pboard = [sender draggingPasteboard]; BOOL successful = NO; - - if ([[pboard types] containsObject: NSPasteboardTypeFileURL]) - { - NSArray *files = [pboard propertyListForType: NSPasteboardTypeFileURL]; - [controller startConversion: [files objectAtIndex: 0]]; + + // 判断是否拖进单文件 + + if (pboard.pasteboardItems.count <= 1) { + //直接获取文件路径 + + NSString *fileURL = [[NSURL URLFromPasteboard:pboard] path]; + [controller startConversion:fileURL]; successful = NO; } - + + return successful; } diff --git a/DictUnifier.xcodeproj/project.pbxproj b/DictUnifier.xcodeproj/project.pbxproj index b2b9ce2..df963f2 100644 --- a/DictUnifier.xcodeproj/project.pbxproj +++ b/DictUnifier.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 07048BBB13DDF11D00BD86F9 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 07048BBA13DDF11D00BD86F9 /* libz.dylib */; }; 07048BBD13DDF12400BD86F9 /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07048BBC13DDF12400BD86F9 /* Python.framework */; }; 071DC178114CA6420062577C /* lua.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 071DC176114CA6420062577C /* lua.cpp */; }; 075208FD1B799D2700CD10AD /* libglib-2.0.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 075208FC1B799D2700CD10AD /* libglib-2.0.a */; }; @@ -49,6 +48,7 @@ 07D86040114811A2006EA8A6 /* DictUnifierAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D8603F114811A2006EA8A6 /* DictUnifierAppDelegate.m */; }; 07D860471148128D006EA8A6 /* DUWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D860461148128D006EA8A6 /* DUWindow.m */; }; 07D86066114812F0006EA8A6 /* DUImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D86065114812F0006EA8A6 /* DUImageView.m */; }; + 3A07337326E9E12F007E0174 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A07337226E9E12F007E0174 /* libz.tbd */; }; 77C8C1F90C07829500965286 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 77C8C1F70C07829500965286 /* MainMenu.xib */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; @@ -128,7 +128,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07048BBA13DDF11D00BD86F9 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = ../../../../../usr/lib/libz.dylib; sourceTree = ""; }; 07048BBC13DDF12400BD86F9 /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Python.framework; path = ../../../../../System/Library/Frameworks/Python.framework; sourceTree = ""; }; 071D72BB215BFB68005B3C8B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; 071DC176114CA6420062577C /* lua.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua.cpp; sourceTree = ""; }; @@ -246,6 +245,7 @@ 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* DictUnifier_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DictUnifier_Prefix.pch; sourceTree = ""; }; + 3A07337226E9E12F007E0174 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8D1107320486CEB800E47090 /* DictUnifier.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DictUnifier.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -255,9 +255,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 3A07337326E9E12F007E0174 /* libz.tbd in Frameworks */, 075208FD1B799D2700CD10AD /* libglib-2.0.a in Frameworks */, 07048BBD13DDF12400BD86F9 /* Python.framework in Frameworks */, - 07048BBB13DDF11D00BD86F9 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -448,7 +448,6 @@ isa = PBXGroup; children = ( 07048BBC13DDF12400BD86F9 /* Python.framework */, - 07048BBA13DDF11D00BD86F9 /* libz.dylib */, 07D57A1911475FF30033F5A4 /* sdconv */, 07D5799111475C5E0033F5A4 /* bin */, 07D5795E11475B760033F5A4 /* templates */, @@ -487,6 +486,7 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( + 3A07337226E9E12F007E0174 /* libz.tbd */, 075208FC1B799D2700CD10AD /* libglib-2.0.a */, 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, @@ -716,6 +716,7 @@ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; @@ -744,6 +745,7 @@ C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 3; diff --git a/DictUnifierAppDelegate.m b/DictUnifierAppDelegate.m index 395ed98..4afb481 100644 --- a/DictUnifierAppDelegate.m +++ b/DictUnifierAppDelegate.m @@ -40,10 +40,13 @@ - (void) startConversion: (NSString *) dictFile - (void) showProgress { - [dropper setHidden: YES]; - [progressBar startAnimation: nil]; - [progressBar setIndeterminate: YES]; - [progressBar setHidden: NO]; + dispatch_async(dispatch_get_main_queue(), ^{ + [dropper setHidden: YES]; + [progressBar startAnimation: nil]; + [progressBar setIndeterminate: YES]; + [progressBar setHidden: NO]; + }); + } - (void) hideProgress @@ -59,165 +62,162 @@ - (void) setProgress: (double) curr - (void) prepareName: (NSArray *) outputArray { - NSAutoreleasePool *pool = [NSAutoreleasePool new]; - - [self hideProgress]; - [nameField setStringValue: [outputArray objectAtIndex: 0]]; - - self.totalEntries = [[outputArray objectAtIndex: 1] integerValue]; - NSLog(@"totalEntries = %lu", self.totalEntries); - if (self.totalEntries <= 0) - self.totalEntries = 1; + @autoreleasepool { + [self hideProgress]; + [nameField setStringValue: [outputArray objectAtIndex: 0]]; - [self setStatus: NSLocalizedString(@"Enter a name to start building", "")]; - [nameField setHidden: NO]; - [nameField setEnabled: YES]; + self.totalEntries = [[outputArray objectAtIndex: 1] integerValue]; + NSLog(@"totalEntries = %lu", self.totalEntries); + if (self.totalEntries <= 0) + self.totalEntries = 1; - [button setAction: @selector(startBuilding:)]; - [button setTitle: NSLocalizedString(@"Start", "")]; - [button setHidden: NO]; + [self setStatus: NSLocalizedString(@"Enter a name to start building", "")]; + [nameField setHidden: NO]; + [nameField setEnabled: YES]; - [pool release]; + [button setAction: @selector(startBuilding:)]; + [button setTitle: NSLocalizedString(@"Start", "")]; + [button setHidden: NO]; + } } - (void) startConversionWith: (NSString *) dictFile { NSLog(@"startConversionWith: %@", dictFile); - NSAutoreleasePool *pool = [NSAutoreleasePool new]; - NSFileManager *manager = [[NSFileManager alloc] init]; - - [self cleanup]; + @autoreleasepool { + NSFileManager *manager = [[NSFileManager alloc] init]; - NSLog(@"Creating %@", self.tempDir); + [self cleanup]; - if (! [manager createDirectoryAtPath: self.tempDir - withIntermediateDirectories: YES - attributes: nil - error: NULL]) - { - NSLog(@"Failed to create directory %@", self.tempDir); - goto exit; - } + NSLog(@"Creating %@", self.tempDir); - NSLog(@"dict extension: %@", [dictFile pathExtension]); - NSString *ifoFile = nil; + if (! [manager createDirectoryAtPath: self.tempDir + withIntermediateDirectories: YES + attributes: nil + error: NULL]) + { + NSLog(@"Failed to create directory %@", self.tempDir); + return; + } - if ([[dictFile pathExtension] isEqual: @"ifo"]) - ifoFile = dictFile; + NSLog(@"dict extension: %@", [dictFile pathExtension]); + NSString *ifoFile = nil; - // Extract that file if it is a bzipped archive - else if ([[dictFile pathExtension] isEqual: @"bz2"]) - { - NSTask *task = [NSTask launchedTaskWithLaunchPath: @"/usr/bin/tar" - arguments: [NSArray arrayWithObjects: - @"-xjf", dictFile, - @"-C", self.tempDir, nil]]; - [task waitUntilExit]; + if ([[dictFile pathExtension] isEqual: @"ifo"]) + ifoFile = dictFile; - if ([task terminationStatus]) + // Extract that file if it is a bzipped archive + else if ([[dictFile pathExtension] isEqual: @"bz2"]) { - NSLog(@"Failed to untar %@ at %@", dictFile, self.tempDir); - goto exit; + NSTask *task = [NSTask launchedTaskWithLaunchPath: @"/usr/bin/tar" + arguments: [NSArray arrayWithObjects: + @"-xjf", dictFile, + @"-C", self.tempDir, nil]]; + [task waitUntilExit]; + + if ([task terminationStatus]) + { + NSLog(@"Failed to untar %@ at %@", dictFile, self.tempDir); + return; + } + + NSArray *dirContents = [manager contentsOfDirectoryAtPath: self.tempDir error: NULL]; + if ([dirContents count]) + { + NSString *extractedPath = [self.tempDir stringByAppendingPathComponent: + [dirContents objectAtIndex: 0]]; + dirContents = [manager contentsOfDirectoryAtPath: extractedPath error: NULL]; + for (NSString *file in dirContents) + if ([[file pathExtension] isEqual: @"ifo"]) + ifoFile = [extractedPath stringByAppendingPathComponent: file]; + } } - NSArray *dirContents = [manager contentsOfDirectoryAtPath: self.tempDir error: NULL]; - if ([dirContents count]) + if (! ifoFile) { - NSString *extractedPath = [self.tempDir stringByAppendingPathComponent: - [dirContents objectAtIndex: 0]]; - dirContents = [manager contentsOfDirectoryAtPath: extractedPath error: NULL]; - for (NSString *file in dirContents) - if ([[file pathExtension] isEqual: @"ifo"]) - ifoFile = [extractedPath stringByAppendingPathComponent: file]; + NSLog(@"Failed to find any matching ifo file."); + return; } - } - - if (! ifoFile) - { - NSLog(@"Failed to find any matching ifo file."); - goto exit; - } - NSLog(@"ifoFile = %@", ifoFile); - self.dictID = [[[ifoFile lastPathComponent] stringByDeletingPathExtension] retain]; - NSLog(@"dictID = %@", self.dictID); + NSLog(@"ifoFile = %@", ifoFile); + self.dictID = [[ifoFile lastPathComponent] stringByDeletingPathExtension]; + NSLog(@"dictID = %@", self.dictID); - self.dictDir = [self.tempDir stringByAppendingPathComponent: - [NSString stringWithFormat: @"dict-%@", self.dictID]]; + self.dictDir = [self.tempDir stringByAppendingPathComponent: + [NSString stringWithFormat: @"dict-%@", self.dictID]]; - if (! [manager createDirectoryAtPath: self.dictDir - withIntermediateDirectories: YES - attributes: nil - error: NULL]) - { - NSLog(@"Failed to create directory %@", self.dictDir); - goto exit; - } + if (! [manager createDirectoryAtPath: self.dictDir + withIntermediateDirectories: YES + attributes: nil + error: NULL]) + { + NSLog(@"Failed to create directory %@", self.dictDir); + return; + } - NSBundle *bundle = [NSBundle mainBundle]; - NSString *templateDir = [[bundle resourcePath] stringByAppendingPathComponent: @"templates"]; - NSArray *dirContents = [manager contentsOfDirectoryAtPath: templateDir error: NULL]; + NSBundle *bundle = [NSBundle mainBundle]; + NSString *templateDir = [[bundle resourcePath] stringByAppendingPathComponent: @"templates"]; + NSArray *dirContents = [manager contentsOfDirectoryAtPath: templateDir error: NULL]; - // Copy all the files under templates directory to temporary dictionary building directory - for (NSString *file in dirContents) - [manager copyItemAtPath: [templateDir stringByAppendingPathComponent: file] - toPath: [self.dictDir stringByAppendingPathComponent: file] - error: NULL]; + // Copy all the files under templates directory to temporary dictionary building directory + for (NSString *file in dirContents) + [manager copyItemAtPath: [templateDir stringByAppendingPathComponent: file] + toPath: [self.dictDir stringByAppendingPathComponent: file] + error: NULL]; - [self showProgress]; - [self setStatus: [NSString stringWithFormat: - NSLocalizedString(@"Converting %@...", ""), - [dictFile lastPathComponent]]]; + [self showProgress]; + [self setStatus: [NSString stringWithFormat: + NSLocalizedString(@"Converting %@...", ""), + [dictFile lastPathComponent]]]; - // Prepare to run the actual conversion utility: sdconv with ifoFile as source file - NSTask *task = [[[NSTask alloc] init] autorelease]; - NSPipe *pipe = [NSPipe pipe]; + // Prepare to run the actual conversion utility: sdconv with ifoFile as source file + NSTask *task = [[NSTask alloc] init]; + NSPipe *pipe = [NSPipe pipe]; - [task setLaunchPath: [bundle pathForAuxiliaryExecutable: @"sdconv"]]; - [task setArguments: [NSArray arrayWithObjects: - ifoFile, [self.dictDir stringByAppendingPathComponent: @"Dictionary.xml"], nil]]; - [task setStandardOutput: pipe]; - [task setStandardError: pipe]; + [task setLaunchPath: [bundle pathForAuxiliaryExecutable: @"sdconv"]]; + [task setArguments: [NSArray arrayWithObjects: + ifoFile, [self.dictDir stringByAppendingPathComponent: @"Dictionary.xml"], nil]]; + [task setStandardOutput: pipe]; + [task setStandardError: pipe]; - [task launch]; - [task waitUntilExit]; - if ([task terminationStatus]) - { - NSLog(@"Failed to run sdconv."); - [self error: [NSString stringWithFormat: - NSLocalizedString(@"Convert %@ failed, abort now.", ""), self.dictID]]; - [self hideProgress]; - [dropper setHidden: NO]; - goto exit; - } + [task launch]; + [task waitUntilExit]; + if ([task terminationStatus]) + { + NSLog(@"Failed to run sdconv."); + [self error: [NSString stringWithFormat: + NSLocalizedString(@"Convert %@ failed, abort now.", ""), self.dictID]]; + [self hideProgress]; + [dropper setHidden: NO]; + return; + } - NSFileHandle *handle = [pipe fileHandleForReading]; - NSString *output = [[[NSString alloc] initWithData: [handle readDataToEndOfFile] - encoding: NSUTF8StringEncoding] autorelease]; + NSFileHandle *handle = [pipe fileHandleForReading]; + NSString *output = [[NSString alloc] initWithData: [handle readDataToEndOfFile] + encoding: NSUTF8StringEncoding]; - [self performSelectorOnMainThread: @selector(prepareName:) - withObject: [output componentsSeparatedByString: @" "] - waitUntilDone: YES]; + [self performSelectorOnMainThread: @selector(prepareName:) + withObject: [output componentsSeparatedByString: @" "] + waitUntilDone: YES]; -exit: - [manager release]; - [pool release]; + } } - (void) showDone { - [button setHidden: YES]; - [self hideProgress]; + dispatch_async(dispatch_get_main_queue(), ^{ + [button setHidden: YES]; + [self hideProgress]; - NSString *imageFile = [[[NSBundle mainBundle] resourcePath] - stringByAppendingPathComponent: @"done.png"]; - NSImage *done = [[NSImage alloc] initWithContentsOfFile: imageFile]; - [dropper setImage: done]; - [done release]; + NSString *imageFile = [[[NSBundle mainBundle] resourcePath] + stringByAppendingPathComponent: @"done.png"]; + NSImage *done = [[NSImage alloc] initWithContentsOfFile: imageFile]; + [dropper setImage: done]; - [dropper setHidden: NO]; - [self setStatus: NSLocalizedString(@"Done", "")]; + [dropper setHidden: NO]; + [self setStatus: NSLocalizedString(@"Done", "")]; + }); } - (int) runProgram: (NSString *) program withArguments: (NSArray *) arguments @@ -265,7 +265,10 @@ - (void) taskFileHandleRead: (NSNotification *) notification { int fd = open([bodyList fileSystemRepresentation], O_RDONLY); NSLog(@"Start watching %@", bodyList); - [progressBar setIndeterminate: NO]; + dispatch_async(dispatch_get_main_queue(), ^{ + [progressBar setIndeterminate: NO]; + }); + dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_source_t fileSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, fd, 0, globalQueue); dispatch_source_set_cancel_handler(fileSource, ^{ close(fd); } ); @@ -307,93 +310,94 @@ - (void) taskFileHandleRead: (NSNotification *) notification - (void) startBuildingWith: (NSString *) dictName { - NSAutoreleasePool *pool = [NSAutoreleasePool new]; - [self setStatus: [NSString stringWithFormat: NSLocalizedString(@"Building %@...", ""), dictName]]; - - NSLog(@"dictDir = %@", self.dictDir); - - // Set the name and id strings accordingly for the dictionary to build - NSString *plistPath = [self.dictDir stringByAppendingPathComponent: @"DictInfo.plist"]; - NSMutableDictionary *plist = [NSMutableDictionary dictionaryWithContentsOfFile: plistPath]; - - [plist setObject: dictName forKey: @"CFBundleDisplayName"]; - [plist setObject: dictName forKey: @"CFBundleName"]; - [plist setObject: [NSString stringWithFormat: @"com.apple.dictionary.%@", self.dictID] - forKey: @"CFBundleIdentifier"]; - - [plist writeToFile: plistPath atomically: YES]; - - // Construct the arguments to invoke build_dict.sh from Dictionary - // Development Kit - NSBundle *bundle = [NSBundle mainBundle]; - NSString *binaryDir = [[bundle resourcePath] stringByAppendingPathComponent: @"bin"]; - NSTask *task = [[[NSTask alloc] init] autorelease]; - NSPipe *pipe = [NSPipe pipe]; - NSDictionary *environments = [NSDictionary dictionaryWithObjectsAndKeys: - @"en_US.UTF-8", @"LANG", - binaryDir, @"DICT_BUILD_TOOL_BIN", nil]; - NSMutableArray *arguments = [NSMutableArray arrayWithObjects:self.dictID, @"Dictionary.xml", - @"Dictionary.css", @"DictInfo.plist", nil]; - - // If we have Mac OS X 10.6, use the new (compress) feature provided by Dictionary Development Kit. - NSDictionary *version = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"]; - NSString *productVersion = [version objectForKey:@"ProductVersion"]; - NSInteger versionMinor = [[[productVersion componentsSeparatedByString:@"."] lastObject] integerValue]; - if (versionMinor >= 6) { - [arguments insertObject: @"-v" atIndex: 0]; - [arguments insertObject: versionMinor >= 11 ? @"10.11" : @"10.6" atIndex: 1]; - NSLog(@"%@", arguments); - } + @autoreleasepool { + [self setStatus: [NSString stringWithFormat: NSLocalizedString(@"Building %@...", ""), dictName]]; + + NSLog(@"dictDir = %@", self.dictDir); + + // Set the name and id strings accordingly for the dictionary to build + NSString *plistPath = [self.dictDir stringByAppendingPathComponent: @"DictInfo.plist"]; + NSMutableDictionary *plist = [NSMutableDictionary dictionaryWithContentsOfFile: plistPath]; + + [plist setObject: dictName forKey: @"CFBundleDisplayName"]; + [plist setObject: dictName forKey: @"CFBundleName"]; + [plist setObject: [NSString stringWithFormat: @"com.apple.dictionary.%@", self.dictID] + forKey: @"CFBundleIdentifier"]; + + [plist writeToFile: plistPath atomically: YES]; + + // Construct the arguments to invoke build_dict.sh from Dictionary + // Development Kit + NSBundle *bundle = [NSBundle mainBundle]; + NSString *binaryDir = [[bundle resourcePath] stringByAppendingPathComponent: @"bin"]; + NSTask *task = [[NSTask alloc] init]; + NSPipe *pipe = [NSPipe pipe]; + NSDictionary *environments = [NSDictionary dictionaryWithObjectsAndKeys: + @"en_US.UTF-8", @"LANG", + binaryDir, @"DICT_BUILD_TOOL_BIN", nil]; + NSMutableArray *arguments = [NSMutableArray arrayWithObjects:self.dictID, @"Dictionary.xml", + @"Dictionary.css", @"DictInfo.plist", nil]; + + // If we have Mac OS X 10.6, use the new (compress) feature provided by Dictionary Development Kit. + NSDictionary *version = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"]; + NSString *productVersion = [version objectForKey:@"ProductVersion"]; + NSInteger versionMinor = [[[productVersion componentsSeparatedByString:@"."] lastObject] integerValue]; + if (versionMinor >= 6) { + [arguments insertObject: @"-v" atIndex: 0]; + [arguments insertObject: versionMinor >= 11 ? @"10.11" : @"10.6" atIndex: 1]; + NSLog(@"%@", arguments); + } - [task setEnvironment: environments]; - [task setCurrentDirectoryPath: self.dictDir]; - [task setLaunchPath: [binaryDir stringByAppendingPathComponent: @"build_dict.sh"]]; - [task setArguments: arguments]; - [task setStandardOutput: pipe]; - [task setStandardError: pipe]; - - // Read process output in background and update status accordingly - NSFileHandle *readHandle = [pipe fileHandleForReading]; - [[NSNotificationCenter defaultCenter] addObserver: self - selector: @selector(taskFileHandleRead:) - name: NSFileHandleReadCompletionNotification - object: readHandle]; - [readHandle readInBackgroundAndNotify]; - [task launch]; - - self.buildTask = task; - [task waitUntilExit]; - self.buildTask = nil; + [task setEnvironment: environments]; + [task setCurrentDirectoryPath: self.dictDir]; + [task setLaunchPath: [binaryDir stringByAppendingPathComponent: @"build_dict.sh"]]; + [task setArguments: arguments]; + [task setStandardOutput: pipe]; + [task setStandardError: pipe]; + + // Read process output in background and update status accordingly + NSFileHandle *readHandle = [pipe fileHandleForReading]; + [[NSNotificationCenter defaultCenter] addObserver: self + selector: @selector(taskFileHandleRead:) + name: NSFileHandleReadCompletionNotification + object: readHandle]; + [readHandle readInBackgroundAndNotify]; + [task launch]; + + self.buildTask = task; + [task waitUntilExit]; + self.buildTask = nil; - NSString *dictBasename = [NSString stringWithFormat: @"%@.dictionary", self.dictID]; - NSString *srcDict = [[self.dictDir stringByAppendingPathComponent: @"objects"] - stringByAppendingPathComponent: dictBasename]; - NSFileManager *manager = [[[NSFileManager alloc] init] autorelease]; - BOOL isDirectory; + NSString *dictBasename = [NSString stringWithFormat: @"%@.dictionary", self.dictID]; + NSString *srcDict = [[self.dictDir stringByAppendingPathComponent: @"objects"] + stringByAppendingPathComponent: dictBasename]; + NSFileManager *manager = [[NSFileManager alloc] init]; + BOOL isDirectory; - if (! [task terminationStatus] && - [manager fileExistsAtPath: srcDict isDirectory: &isDirectory] && isDirectory) - { - NSString *destDir = [@"~/Library/Dictionaries" stringByExpandingTildeInPath]; - NSString *destDict = [destDir stringByAppendingPathComponent: dictBasename]; + if (! [task terminationStatus] && + [manager fileExistsAtPath: srcDict isDirectory: &isDirectory] && isDirectory) + { + NSString *destDir = [@"~/Library/Dictionaries" stringByExpandingTildeInPath]; + NSString *destDict = [destDir stringByAppendingPathComponent: dictBasename]; + + [self setStatus: [NSString stringWithFormat: + NSLocalizedString(@"Installing into %@...", ""), destDir]]; + + NSLog(@"Creating %@", destDir); + [self runProgram: @"/bin/mkdir" withArguments: [NSArray arrayWithObjects: @"-p", destDir, nil]]; + NSLog(@"Removing %@", destDict); + [self runProgram: @"/bin/rm" withArguments: [NSArray arrayWithObjects: @"-rf", destDict, nil]]; + NSLog(@"Installing %@ to %@", srcDict, destDict); + [self runProgram: @"/usr/bin/ditto" + withArguments: [NSArray arrayWithObjects: + @"--noextattr", @"--norsrc", srcDict, destDict, nil]]; + NSLog(@"Done."); + [self showDone]; + } - [self setStatus: [NSString stringWithFormat: - NSLocalizedString(@"Installing into %@...", ""), destDir]]; - - NSLog(@"Creating %@", destDir); - [self runProgram: @"/bin/mkdir" withArguments: [NSArray arrayWithObjects: @"-p", destDir, nil]]; - NSLog(@"Removing %@", destDict); - [self runProgram: @"/bin/rm" withArguments: [NSArray arrayWithObjects: @"-rf", destDict, nil]]; - NSLog(@"Installing %@ to %@", srcDict, destDict); - [self runProgram: @"/usr/bin/ditto" - withArguments: [NSArray arrayWithObjects: - @"--noextattr", @"--norsrc", srcDict, destDict, nil]]; - NSLog(@"Done."); - [self showDone]; + [self cleanup]; } - - [self cleanup]; - [pool release]; + } - (IBAction) startBuilding: (id) sender @@ -410,11 +414,7 @@ - (IBAction) startBuilding: (id) sender - (void) dealloc { - [buildTask release]; - [dictID release]; - [dictDir release]; - [tempDir release]; - [super dealloc]; + } - (void) cleanup @@ -433,7 +433,11 @@ - (void) cleanup - (void) setStatus: (NSString *) str { - [label setStringValue: str]; + NSLog(@"status: %@", str); + dispatch_async(dispatch_get_main_queue(), ^{ + [label setStringValue: str]; + }); + } - (void) error: (NSString *) str diff --git a/README.md b/README.md index 4cb1243..dfd2f07 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,9 @@ Dictionary conversion tool for Mac OS X 10.5 and above. +## 词典包地址 +http://download.huzheng.org/zh_CN/index.html + ## Download Download it from [GitHub releases, v2.1](https://github.com/jjgod/mac-dictionary-kit/releases/download/v2.1/DictUnifier-2.1.zip). diff --git a/ddk/build_dict.sh b/ddk/build_dict.sh index da5a012..908d31d 100755 --- a/ddk/build_dict.sh +++ b/ddk/build_dict.sh @@ -107,7 +107,7 @@ echo "- Building $DICT_NAME.dictionary." # Check source XML. echo "- Checking source." -xmllint --stream -noout "$SRC_FILE" || error "Error." +# xmllint --stream -noout "$SRC_FILE" || error "Error." # Prepare directory. echo "- Cleaning objects directory." From e801b2ac2cde5b84673bffa4dc14e4a4fc48d860 Mon Sep 17 00:00:00 2001 From: isee15 Date: Thu, 9 Sep 2021 15:40:49 +0800 Subject: [PATCH 2/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dfd2f07..7f7cce1 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ http://download.huzheng.org/zh_CN/index.html ## Download -Download it from [GitHub releases, v2.1](https://github.com/jjgod/mac-dictionary-kit/releases/download/v2.1/DictUnifier-2.1.zip). +Download it from [GitHub releases, v2.2](https://github.com/isee15/mac-dictionary-kit/releases/download/v2.2/DictUnifier.zip). ## Build instructions From 8d62da236e5c509a98547b05a38c831b36ab491a Mon Sep 17 00:00:00 2001 From: isee15 Date: Fri, 26 Aug 2022 19:14:30 +0800 Subject: [PATCH 3/6] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 7f7cce1..f8ccf34 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,10 @@ Dictionary conversion tool for Mac OS X 10.5 and above. ## 词典包地址 http://download.huzheng.org/zh_CN/index.html +## 转换好的一些词典 +https://github.com/isee15/mac-dictionary-kit/releases/download/v2.2/Dictionaries.zip +解压到~/Library/Dictionaries + ## Download Download it from [GitHub releases, v2.2](https://github.com/isee15/mac-dictionary-kit/releases/download/v2.2/DictUnifier.zip). From f5794c3ded57c06257aaf1c6aa8cd9bbc50af076 Mon Sep 17 00:00:00 2001 From: zhourui05 Date: Sat, 27 Aug 2022 11:17:49 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AppIcon.png | Bin 0 -> 126088 bytes DictUnifier.xcodeproj/project.pbxproj | 24 +-- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + DictUnifierAppDelegate.m | 201 +++++++++--------- Info.plist | 2 +- sdconv/convert.cpp | 4 - sdconv/lua.cpp | 43 ---- sdconv/lua.h | 13 -- sdconv/python.cpp | 96 --------- sdconv/python.h | 13 -- 10 files changed, 123 insertions(+), 281 deletions(-) create mode 100644 AppIcon.png create mode 100644 DictUnifier.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 sdconv/lua.cpp delete mode 100644 sdconv/lua.h delete mode 100644 sdconv/python.cpp delete mode 100644 sdconv/python.h diff --git a/AppIcon.png b/AppIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a2c40351f58d95dc03c2e253ff0ce5184e76e237 GIT binary patch literal 126088 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 Yzsyt^mypGEEbyO}n!f65Wt))y57#CLM*si- literal 0 HcmV?d00001 diff --git a/DictUnifier.xcodeproj/project.pbxproj b/DictUnifier.xcodeproj/project.pbxproj index df963f2..8a6ec39 100644 --- a/DictUnifier.xcodeproj/project.pbxproj +++ b/DictUnifier.xcodeproj/project.pbxproj @@ -7,8 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 07048BBD13DDF12400BD86F9 /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07048BBC13DDF12400BD86F9 /* Python.framework */; }; - 071DC178114CA6420062577C /* lua.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 071DC176114CA6420062577C /* lua.cpp */; }; 075208FD1B799D2700CD10AD /* libglib-2.0.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 075208FC1B799D2700CD10AD /* libglib-2.0.a */; }; 07687D941143E9C30032F3CD /* DictUnifier.icns in Resources */ = {isa = PBXBuildFile; fileRef = 07687D931143E9C30032F3CD /* DictUnifier.icns */; }; 07687DB91143EF690032F3CD /* done.png in Resources */ = {isa = PBXBuildFile; fileRef = 07687DB71143EF690032F3CD /* done.png */; }; @@ -41,7 +39,6 @@ 07D57A2711475FF30033F5A4 /* convert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07D57A1A11475FF30033F5A4 /* convert.cpp */; }; 07D57A2811475FF30033F5A4 /* dict.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07D57A1C11475FF30033F5A4 /* dict.cpp */; }; 07D57A2911475FF30033F5A4 /* index.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07D57A1E11475FF30033F5A4 /* index.cpp */; }; - 07D57A2B11475FF30033F5A4 /* python.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07D57A2211475FF30033F5A4 /* python.cpp */; }; 07D57A2C11475FF30033F5A4 /* sdconv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07D57A2411475FF30033F5A4 /* sdconv.cpp */; }; 07D57A2D11475FF30033F5A4 /* storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07D57A2511475FF30033F5A4 /* storage.cpp */; }; 07D57A7F114761780033F5A4 /* sdconv in CopyFiles */ = {isa = PBXBuildFile; fileRef = 07D579C411475D930033F5A4 /* sdconv */; }; @@ -49,6 +46,7 @@ 07D860471148128D006EA8A6 /* DUWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D860461148128D006EA8A6 /* DUWindow.m */; }; 07D86066114812F0006EA8A6 /* DUImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D86065114812F0006EA8A6 /* DUImageView.m */; }; 3A07337326E9E12F007E0174 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A07337226E9E12F007E0174 /* libz.tbd */; }; + 3A91E82528B9BEA10067F474 /* AppIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 3A91E82428B9BEA10067F474 /* AppIcon.png */; }; 77C8C1F90C07829500965286 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 77C8C1F70C07829500965286 /* MainMenu.xib */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; @@ -128,10 +126,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 07048BBC13DDF12400BD86F9 /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Python.framework; path = ../../../../../System/Library/Frameworks/Python.framework; sourceTree = ""; }; 071D72BB215BFB68005B3C8B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - 071DC176114CA6420062577C /* lua.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lua.cpp; sourceTree = ""; }; - 071DC177114CA6420062577C /* lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua.h; sourceTree = ""; }; 075208FC1B799D2700CD10AD /* libglib-2.0.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libglib-2.0.a"; path = "../../../usr/local/Cellar/glib/2.44.1/lib/libglib-2.0.a"; sourceTree = ""; }; 07687D931143E9C30032F3CD /* DictUnifier.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = DictUnifier.icns; sourceTree = ""; }; 07687DB71143EF690032F3CD /* done.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = done.png; sourceTree = ""; }; @@ -169,8 +164,6 @@ 07D57A1E11475FF30033F5A4 /* index.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = index.cpp; sourceTree = ""; }; 07D57A1F11475FF30033F5A4 /* index.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = index.h; sourceTree = ""; }; 07D57A2111475FF30033F5A4 /* mdk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mdk.h; sourceTree = ""; }; - 07D57A2211475FF30033F5A4 /* python.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = python.cpp; sourceTree = ""; }; - 07D57A2311475FF30033F5A4 /* python.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = python.h; sourceTree = ""; }; 07D57A2411475FF30033F5A4 /* sdconv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sdconv.cpp; sourceTree = ""; }; 07D57A2511475FF30033F5A4 /* storage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = storage.cpp; sourceTree = ""; }; 07D57A2611475FF30033F5A4 /* storage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = storage.h; sourceTree = ""; }; @@ -246,6 +239,7 @@ 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* DictUnifier_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DictUnifier_Prefix.pch; sourceTree = ""; }; 3A07337226E9E12F007E0174 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; }; + 3A91E82428B9BEA10067F474 /* AppIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = AppIcon.png; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8D1107320486CEB800E47090 /* DictUnifier.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DictUnifier.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -257,7 +251,6 @@ files = ( 3A07337326E9E12F007E0174 /* libz.tbd in Frameworks */, 075208FD1B799D2700CD10AD /* libglib-2.0.a in Frameworks */, - 07048BBD13DDF12400BD86F9 /* Python.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -312,8 +305,6 @@ 07D57A1911475FF30033F5A4 /* sdconv */ = { isa = PBXGroup; children = ( - 071DC176114CA6420062577C /* lua.cpp */, - 071DC177114CA6420062577C /* lua.h */, 07D57A2E114760350033F5A4 /* include */, 07D57A1A11475FF30033F5A4 /* convert.cpp */, 07D57A1B11475FF30033F5A4 /* convert.h */, @@ -322,8 +313,6 @@ 07D57A1E11475FF30033F5A4 /* index.cpp */, 07D57A1F11475FF30033F5A4 /* index.h */, 07D57A2111475FF30033F5A4 /* mdk.h */, - 07D57A2211475FF30033F5A4 /* python.cpp */, - 07D57A2311475FF30033F5A4 /* python.h */, 07D57A2411475FF30033F5A4 /* sdconv.cpp */, 07D57A2511475FF30033F5A4 /* storage.cpp */, 07D57A2611475FF30033F5A4 /* storage.h */, @@ -447,7 +436,6 @@ 29B97314FDCFA39411CA2CEA /* DictUnifier */ = { isa = PBXGroup; children = ( - 07048BBC13DDF12400BD86F9 /* Python.framework */, 07D57A1911475FF30033F5A4 /* sdconv */, 07D5799111475C5E0033F5A4 /* bin */, 07D5795E11475B760033F5A4 /* templates */, @@ -472,6 +460,7 @@ 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( + 3A91E82428B9BEA10067F474 /* AppIcon.png */, 076D37D6114A37FC00D55901 /* Localizable.strings */, 07687DB71143EF690032F3CD /* done.png */, 07687DB81143EF690032F3CD /* dropper.png */, @@ -579,6 +568,7 @@ 07687DB91143EF690032F3CD /* done.png in Resources */, 07687DBA1143EF690032F3CD /* dropper.png in Resources */, 076D37D7114A37FC00D55901 /* Localizable.strings in Resources */, + 3A91E82528B9BEA10067F474 /* AppIcon.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -608,10 +598,8 @@ 07D57A2711475FF30033F5A4 /* convert.cpp in Sources */, 07D57A2811475FF30033F5A4 /* dict.cpp in Sources */, 07D57A2911475FF30033F5A4 /* index.cpp in Sources */, - 07D57A2B11475FF30033F5A4 /* python.cpp in Sources */, 07D57A2C11475FF30033F5A4 /* sdconv.cpp in Sources */, 07D57A2D11475FF30033F5A4 /* storage.cpp in Sources */, - 071DC178114CA6420062577C /* lua.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -683,6 +671,7 @@ "$(inherited)", /usr/local/lib, ); + MACOSX_DEPLOYMENT_TARGET = 11.0; OTHER_LDFLAGS = ""; PRODUCT_NAME = sdconv; SDKROOT = ""; @@ -706,6 +695,7 @@ "$(inherited)", /usr/local/lib, ); + MACOSX_DEPLOYMENT_TARGET = 11.0; OTHER_LDFLAGS = ""; PRODUCT_NAME = sdconv; SDKROOT = ""; @@ -733,6 +723,7 @@ "$(inherited)", "\"$(SRCROOT)\"", ); + MACOSX_DEPLOYMENT_TARGET = 11.0; PRODUCT_BUNDLE_IDENTIFIER = "org.jjgod.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DictUnifier; SDKROOT = ""; @@ -760,6 +751,7 @@ "$(inherited)", "\"$(SRCROOT)\"", ); + MACOSX_DEPLOYMENT_TARGET = 11.0; PRODUCT_BUNDLE_IDENTIFIER = "org.jjgod.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = DictUnifier; SDKROOT = ""; diff --git a/DictUnifier.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/DictUnifier.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/DictUnifier.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/DictUnifierAppDelegate.m b/DictUnifierAppDelegate.m index 4afb481..182af86 100644 --- a/DictUnifierAppDelegate.m +++ b/DictUnifierAppDelegate.m @@ -19,7 +19,7 @@ - (id) init self.buildTask = nil; self.totalEntries = 1; } - + return self; } @@ -57,7 +57,9 @@ - (void) hideProgress - (void) setProgress: (double) curr { - [progressBar setDoubleValue: curr]; + dispatch_async(dispatch_get_main_queue(), ^{ + [progressBar setDoubleValue: curr]; + }); } - (void) prepareName: (NSArray *) outputArray @@ -65,16 +67,16 @@ - (void) prepareName: (NSArray *) outputArray @autoreleasepool { [self hideProgress]; [nameField setStringValue: [outputArray objectAtIndex: 0]]; - + self.totalEntries = [[outputArray objectAtIndex: 1] integerValue]; NSLog(@"totalEntries = %lu", self.totalEntries); if (self.totalEntries <= 0) self.totalEntries = 1; - + [self setStatus: NSLocalizedString(@"Enter a name to start building", "")]; [nameField setHidden: NO]; [nameField setEnabled: YES]; - + [button setAction: @selector(startBuilding:)]; [button setTitle: NSLocalizedString(@"Start", "")]; [button setHidden: NO]; @@ -84,29 +86,29 @@ - (void) prepareName: (NSArray *) outputArray - (void) startConversionWith: (NSString *) dictFile { NSLog(@"startConversionWith: %@", dictFile); - + @autoreleasepool { NSFileManager *manager = [[NSFileManager alloc] init]; - + [self cleanup]; - + NSLog(@"Creating %@", self.tempDir); - - if (! [manager createDirectoryAtPath: self.tempDir - withIntermediateDirectories: YES - attributes: nil - error: NULL]) + + if (![manager createDirectoryAtPath: self.tempDir + withIntermediateDirectories: YES + attributes: nil + error: NULL]) { NSLog(@"Failed to create directory %@", self.tempDir); return; } - + NSLog(@"dict extension: %@", [dictFile pathExtension]); NSString *ifoFile = nil; - + if ([[dictFile pathExtension] isEqual: @"ifo"]) ifoFile = dictFile; - + // Extract that file if it is a bzipped archive else if ([[dictFile pathExtension] isEqual: @"bz2"]) { @@ -115,13 +117,13 @@ - (void) startConversionWith: (NSString *) dictFile @"-xjf", dictFile, @"-C", self.tempDir, nil]]; [task waitUntilExit]; - + if ([task terminationStatus]) { NSLog(@"Failed to untar %@ at %@", dictFile, self.tempDir); return; } - + NSArray *dirContents = [manager contentsOfDirectoryAtPath: self.tempDir error: NULL]; if ([dirContents count]) { @@ -133,54 +135,54 @@ - (void) startConversionWith: (NSString *) dictFile ifoFile = [extractedPath stringByAppendingPathComponent: file]; } } - - if (! ifoFile) + + if (!ifoFile) { NSLog(@"Failed to find any matching ifo file."); return; } - + NSLog(@"ifoFile = %@", ifoFile); self.dictID = [[ifoFile lastPathComponent] stringByDeletingPathExtension]; NSLog(@"dictID = %@", self.dictID); - + self.dictDir = [self.tempDir stringByAppendingPathComponent: [NSString stringWithFormat: @"dict-%@", self.dictID]]; - - if (! [manager createDirectoryAtPath: self.dictDir - withIntermediateDirectories: YES - attributes: nil - error: NULL]) + + if (![manager createDirectoryAtPath: self.dictDir + withIntermediateDirectories: YES + attributes: nil + error: NULL]) { NSLog(@"Failed to create directory %@", self.dictDir); return; } - + NSBundle *bundle = [NSBundle mainBundle]; NSString *templateDir = [[bundle resourcePath] stringByAppendingPathComponent: @"templates"]; NSArray *dirContents = [manager contentsOfDirectoryAtPath: templateDir error: NULL]; - + // Copy all the files under templates directory to temporary dictionary building directory for (NSString *file in dirContents) [manager copyItemAtPath: [templateDir stringByAppendingPathComponent: file] toPath: [self.dictDir stringByAppendingPathComponent: file] error: NULL]; - + [self showProgress]; [self setStatus: [NSString stringWithFormat: - NSLocalizedString(@"Converting %@...", ""), - [dictFile lastPathComponent]]]; - + NSLocalizedString(@"Converting %@...", ""), + [dictFile lastPathComponent]]]; + // Prepare to run the actual conversion utility: sdconv with ifoFile as source file NSTask *task = [[NSTask alloc] init]; NSPipe *pipe = [NSPipe pipe]; - + [task setLaunchPath: [bundle pathForAuxiliaryExecutable: @"sdconv"]]; [task setArguments: [NSArray arrayWithObjects: ifoFile, [self.dictDir stringByAppendingPathComponent: @"Dictionary.xml"], nil]]; [task setStandardOutput: pipe]; [task setStandardError: pipe]; - + [task launch]; [task waitUntilExit]; if ([task terminationStatus]) @@ -192,15 +194,15 @@ - (void) startConversionWith: (NSString *) dictFile [dropper setHidden: NO]; return; } - + NSFileHandle *handle = [pipe fileHandleForReading]; NSString *output = [[NSString alloc] initWithData: [handle readDataToEndOfFile] - encoding: NSUTF8StringEncoding]; - + encoding: NSUTF8StringEncoding]; + [self performSelectorOnMainThread: @selector(prepareName:) withObject: [output componentsSeparatedByString: @" "] waitUntilDone: YES]; - + } } @@ -209,12 +211,12 @@ - (void) showDone dispatch_async(dispatch_get_main_queue(), ^{ [button setHidden: YES]; [self hideProgress]; - + NSString *imageFile = [[[NSBundle mainBundle] resourcePath] - stringByAppendingPathComponent: @"done.png"]; + stringByAppendingPathComponent: @"done.png"]; NSImage *done = [[NSImage alloc] initWithContentsOfFile: imageFile]; [dropper setImage: done]; - + [dropper setHidden: NO]; [self setStatus: NSLocalizedString(@"Done", "")]; }); @@ -224,27 +226,27 @@ - (int) runProgram: (NSString *) program withArguments: (NSArray *) arguments { NSTask *task = [NSTask launchedTaskWithLaunchPath: program arguments: arguments]; - + [task waitUntilExit]; return [task terminationStatus]; } - (void) taskFileHandleRead: (NSNotification *) notification { - NSDictionary *userInfo = [notification userInfo]; - int error = [[userInfo objectForKey: @"NSFileHandleError"] intValue]; - + NSDictionary *userInfo = [notification userInfo]; + int error = [[userInfo objectForKey: @"NSFileHandleError"] intValue]; + if (error) NSLog(@"DictUnifier: error %d.", error); else { - NSData *data = [userInfo objectForKey: NSFileHandleNotificationDataItem]; - NSUInteger length = [data length]; + NSData *data = [userInfo objectForKey: NSFileHandleNotificationDataItem]; + NSUInteger length = [data length]; if (length == 0) return; - + NSString *str = [NSString stringWithUTF8String: [data bytes]]; - + if ([str hasPrefix: @"- "]) { NSUInteger start, end; @@ -268,42 +270,51 @@ - (void) taskFileHandleRead: (NSNotification *) notification dispatch_async(dispatch_get_main_queue(), ^{ [progressBar setIndeterminate: NO]; }); - + unsigned long mask = DISPATCH_VNODE_DELETE | DISPATCH_VNODE_WRITE | DISPATCH_VNODE_EXTEND | DISPATCH_VNODE_ATTRIB | DISPATCH_VNODE_LINK | DISPATCH_VNODE_RENAME | DISPATCH_VNODE_REVOKE; dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - dispatch_source_t fileSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, fd, 0, globalQueue); + + dispatch_source_t fileSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, fd, mask, globalQueue); dispatch_source_set_cancel_handler(fileSource, ^{ close(fd); } ); dispatch_source_set_event_handler(fileSource, ^{ - char buf[1024]; - ssize_t len = read(fd, buf, sizeof(buf)); - if (len > 0) { - // NSLog(@"Got data from stdin: %.*s", len, buf); - ssize_t i; - // scan backwards for the first \t, it's where the last processed item number ends - for (i = len - 1; i >= 0 && buf[i] != '\t'; i--) - ; - // scan backwards to read in the last processed item number - if (i > 0 && buf[i] == '\t') { - ssize_t end = i; - for (i--; i >= 0 && buf[i] != '\n'; i--) + unsigned long l = dispatch_source_get_data(fileSource); + if (l & DISPATCH_VNODE_DELETE) { + printf("watched file deleted! cancelling source\n"); + dispatch_source_cancel(fileSource); + }else { + char buf[1024]; + ssize_t len = read(fd, buf, sizeof(buf)); + if (len > 0) { +// NSLog(@"Got data from stdin: %.*s", len, buf); + ssize_t i; + // scan backwards for the first \t, it's where the last processed item number ends + for (i = len - 1; i >= 0 && buf[i] != '\t'; i--) ; - if (buf[i] == '\n') { - buf[end] = '\0'; - char *str = buf + i + 1; - int curr = 0; - sscanf(str, "%d", &curr); - [self setProgress: curr * 100.0 / self.totalEntries]; + // scan backwards to read in the last processed item number + if (i > 0 && buf[i] == '\t') { + ssize_t end = i; + for (i--; i >= 0 && buf[i] != '\n'; i--) + ; + if (buf[i] == '\n') { + buf[end] = '\0'; + char *str = buf + i + 1; + int curr = 0; + sscanf(str, "%d", &curr); + [self setProgress: curr * 100.0 / self.totalEntries]; + [self setStatus:[NSString stringWithFormat:@"Adding body data:%@/%@", @(curr), @(self.totalEntries)]]; + } } } } }); dispatch_resume(fileSource); break; - } else + } else { sleep(0.5); + } } } } - + [[notification object] readInBackgroundAndNotify]; } } @@ -312,20 +323,20 @@ - (void) startBuildingWith: (NSString *) dictName { @autoreleasepool { [self setStatus: [NSString stringWithFormat: NSLocalizedString(@"Building %@...", ""), dictName]]; - + NSLog(@"dictDir = %@", self.dictDir); - + // Set the name and id strings accordingly for the dictionary to build NSString *plistPath = [self.dictDir stringByAppendingPathComponent: @"DictInfo.plist"]; NSMutableDictionary *plist = [NSMutableDictionary dictionaryWithContentsOfFile: plistPath]; - + [plist setObject: dictName forKey: @"CFBundleDisplayName"]; [plist setObject: dictName forKey: @"CFBundleName"]; [plist setObject: [NSString stringWithFormat: @"com.apple.dictionary.%@", self.dictID] forKey: @"CFBundleIdentifier"]; - + [plist writeToFile: plistPath atomically: YES]; - + // Construct the arguments to invoke build_dict.sh from Dictionary // Development Kit NSBundle *bundle = [NSBundle mainBundle]; @@ -333,11 +344,11 @@ - (void) startBuildingWith: (NSString *) dictName NSTask *task = [[NSTask alloc] init]; NSPipe *pipe = [NSPipe pipe]; NSDictionary *environments = [NSDictionary dictionaryWithObjectsAndKeys: - @"en_US.UTF-8", @"LANG", - binaryDir, @"DICT_BUILD_TOOL_BIN", nil]; + @"en_US.UTF-8", @"LANG", + binaryDir, @"DICT_BUILD_TOOL_BIN", nil]; NSMutableArray *arguments = [NSMutableArray arrayWithObjects:self.dictID, @"Dictionary.xml", - @"Dictionary.css", @"DictInfo.plist", nil]; - + @"Dictionary.css", @"DictInfo.plist", nil]; + // If we have Mac OS X 10.6, use the new (compress) feature provided by Dictionary Development Kit. NSDictionary *version = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"]; NSString *productVersion = [version objectForKey:@"ProductVersion"]; @@ -347,14 +358,14 @@ - (void) startBuildingWith: (NSString *) dictName [arguments insertObject: versionMinor >= 11 ? @"10.11" : @"10.6" atIndex: 1]; NSLog(@"%@", arguments); } - + [task setEnvironment: environments]; [task setCurrentDirectoryPath: self.dictDir]; [task setLaunchPath: [binaryDir stringByAppendingPathComponent: @"build_dict.sh"]]; [task setArguments: arguments]; [task setStandardOutput: pipe]; [task setStandardError: pipe]; - + // Read process output in background and update status accordingly NSFileHandle *readHandle = [pipe fileHandleForReading]; [[NSNotificationCenter defaultCenter] addObserver: self @@ -363,26 +374,26 @@ - (void) startBuildingWith: (NSString *) dictName object: readHandle]; [readHandle readInBackgroundAndNotify]; [task launch]; - + self.buildTask = task; [task waitUntilExit]; self.buildTask = nil; - + NSString *dictBasename = [NSString stringWithFormat: @"%@.dictionary", self.dictID]; NSString *srcDict = [[self.dictDir stringByAppendingPathComponent: @"objects"] stringByAppendingPathComponent: dictBasename]; NSFileManager *manager = [[NSFileManager alloc] init]; BOOL isDirectory; - - if (! [task terminationStatus] && + + if (![task terminationStatus] && [manager fileExistsAtPath: srcDict isDirectory: &isDirectory] && isDirectory) { NSString *destDir = [@"~/Library/Dictionaries" stringByExpandingTildeInPath]; NSString *destDict = [destDir stringByAppendingPathComponent: dictBasename]; - + [self setStatus: [NSString stringWithFormat: - NSLocalizedString(@"Installing into %@...", ""), destDir]]; - + NSLocalizedString(@"Installing into %@...", ""), destDir]]; + NSLog(@"Creating %@", destDir); [self runProgram: @"/bin/mkdir" withArguments: [NSArray arrayWithObjects: @"-p", destDir, nil]]; NSLog(@"Removing %@", destDict); @@ -394,7 +405,7 @@ - (void) startBuildingWith: (NSString *) dictName NSLog(@"Done."); [self showDone]; } - + [self cleanup]; } @@ -404,17 +415,17 @@ - (IBAction) startBuilding: (id) sender { [nameField setHidden: YES]; [self showProgress]; - + [button setAction: @selector(stop:)]; [button setTitle: NSLocalizedString(@"Stop", "")]; - + [self performSelectorInBackground: @selector(startBuildingWith:) withObject: [nameField stringValue]]; } - (void) dealloc { - + } - (void) cleanup @@ -453,7 +464,7 @@ - (IBAction) stop: (id) sender [self.buildTask terminate]; system("killall add_body_record"); } - + [self hideProgress]; [button setHidden: YES]; [dropper setHidden: NO]; diff --git a/Info.plist b/Info.plist index 463ae8c..9eaacb4 100644 --- a/Info.plist +++ b/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - DictUnifier.icns + AppIcon.png CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion diff --git a/sdconv/convert.cpp b/sdconv/convert.cpp index bb59ee3..fc5e647 100644 --- a/sdconv/convert.cpp +++ b/sdconv/convert.cpp @@ -4,8 +4,6 @@ #include "dict.h" #include "convert.h" -#include "python.h" -#include "lua.h" #include "index.h" GString *mdk_start_convert(struct convert_module *mod) @@ -31,8 +29,6 @@ inline bool convert_with_glib(gchar *src, GString *dest) struct convert_module convert_module_list[] = { { "default", 0, NULL, convert_with_glib, NULL }, - { "python", 1, init_python, convert_with_python, fini_python }, - // { "lua", 1, init_lua, convert_with_lua, fini_lua }, { NULL, 0, NULL, NULL, NULL }, }; diff --git a/sdconv/lua.cpp b/sdconv/lua.cpp deleted file mode 100644 index a705ae9..0000000 --- a/sdconv/lua.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// lua.cpp - -#if 0 -#include "lua.h" -#include - -lua_State *L; - -bool init_lua(const char *file) -{ - int ret; - - L = luaL_newstate(); - - luaL_openlibs(L); - ret = luaL_loadfile(L, file); - if (ret) - { - fprintf(stderr, "Couldn't load file: %s\n", lua_tostring(L, -1)); - return false; - } - - return true; -} - -void fini_lua() -{ - lua_close(L); -} - -bool convert_with_lua(gchar *src, GString *dest) -{ - lua_pushstring(L, src); - lua_setglobal(L, "input"); - - lua_pcall(L, 0, 1, 0); - g_string_append(dest, lua_tostring(L, -1)); - lua_pop(L, 1); - - return true; -} - -#endif \ No newline at end of file diff --git a/sdconv/lua.h b/sdconv/lua.h deleted file mode 100644 index b8b82b8..0000000 --- a/sdconv/lua.h +++ /dev/null @@ -1,13 +0,0 @@ -// lua.h - -#ifndef SDCONV_LUA_H -#define SDCONV_LUA_H - -#include - -bool init_lua(const char *file); -void fini_lua(); -bool convert_with_lua(gchar *src, GString *dest); - -#endif - diff --git a/sdconv/python.cpp b/sdconv/python.cpp deleted file mode 100644 index 4355a95..0000000 --- a/sdconv/python.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// python.cpp - -#include -#include -#include "python.h" - -PyObject *py_transform_func; - -static char *copy_module_name_from_file(const char *file) -{ - char *module = strdup(basename((char *) file)); - if (! module) - return NULL; - - size_t len = strlen(module); - size_t i; - - for (i = len - 1; i >= 0; i--) - if (module[i] == '.') - module[i] = '\0'; - - return module; -} - -void add_directory_of_file_to_path(const char *file) -{ - PyRun_SimpleString("import sys"); - - char buf[256]; - snprintf(buf, sizeof(buf), "sys.path.insert(0, '%s')", - dirname((char *) file)); - - PyRun_SimpleString(buf); -} - -bool init_python(const char *file) -{ - PyObject *module; - - char *module_name = copy_module_name_from_file(file); - if (! module_name) - goto failed2; - - Py_Initialize(); - add_directory_of_file_to_path(file); - - fprintf(stderr, "loading module %s...\n", module_name); - module = PyImport_ImportModule(module_name); - if (! module) - goto failed1; - - fprintf(stderr, "locating function transform...\n"); - /* locate py_module.transform() */ - py_transform_func = PyObject_GetAttrString(module, - "transform"); - Py_DECREF(module); - if (! py_transform_func) - goto failed1; - - return true; - -failed1: - free(module_name); - -failed2: - return false; -} - -void fini_python() -{ - Py_DECREF(py_transform_func); - Py_Finalize(); -} - -bool convert_with_python(gchar *src, GString *dest) -{ - PyObject *pargs = Py_BuildValue("(s)", src); - PyObject *pstr = PyEval_CallObject(py_transform_func, pargs); - - if (pstr) - { - char *cstr = NULL; - PyArg_Parse(pstr, "s", &cstr); - - if (cstr) - g_string_append(dest, cstr); - - Py_DECREF(pstr); - } else - g_string_append(dest, "failed to transform\n"); - - Py_DECREF(pargs); - - return true; -} - diff --git a/sdconv/python.h b/sdconv/python.h deleted file mode 100644 index 3de6083..0000000 --- a/sdconv/python.h +++ /dev/null @@ -1,13 +0,0 @@ -// python.h - -#ifndef SDCONV_PYTHON_H -#define SDCONV_PYTHON_H - -#include - -bool init_python(const char *file); -void fini_python(); -bool convert_with_python(gchar *src, GString *dest); - -#endif - From 6a3a72dc50c95b0c133137dbfee6b7afe3f90475 Mon Sep 17 00:00:00 2001 From: isee15 Date: Wed, 2 Nov 2022 10:25:03 +0800 Subject: [PATCH 5/6] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f8ccf34..760734b 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,10 @@ Download it from [GitHub releases, v2.2](https://github.com/isee15/mac-dictionar ## Build instructions Install static build of glib before trying to build: +brew update +brew install glib - brew install glib --with-static + // brew install glib --with-static ## TODO From 49d653ab9efb44486c67d46eb81de84a882bafbf Mon Sep 17 00:00:00 2001 From: isee15 Date: Wed, 2 Nov 2022 10:25:47 +0800 Subject: [PATCH 6/6] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 760734b..bd9d987 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,13 @@ Download it from [GitHub releases, v2.2](https://github.com/isee15/mac-dictionar ## Build instructions Install static build of glib before trying to build: +``` brew update brew install glib +// brew install glib --with-static +``` - // brew install glib --with-static + ## TODO