summaryrefslogtreecommitdiff
path: root/emojiexport/AppDelegate.m
diff options
context:
space:
mode:
Diffstat (limited to 'emojiexport/AppDelegate.m')
-rw-r--r--emojiexport/AppDelegate.m211
1 files changed, 211 insertions, 0 deletions
diff --git a/emojiexport/AppDelegate.m b/emojiexport/AppDelegate.m
new file mode 100644
index 0000000..fcf83bf
--- /dev/null
+++ b/emojiexport/AppDelegate.m
@@ -0,0 +1,211 @@
+//
+// AppDelegate.m
+// emojiexport
+//
+// Created by Гришка on 14.08.12
+// Copyright (c) 2012 Гришка
+// Copyright (c) 2019 ch1p_
+//
+// All rights reserved
+//
+
+#import "AppDelegate.h"
+
+#define FONT_SIZE 40
+#define SIZE 40
+#define OFFSET -13
+
+//#define FONT_SIZE 20
+//#define SIZE 20
+//#define OFFSET -7
+
+@implementation AppDelegate
+
+- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
+{
+ // Insert code here to initialize your application
+// [[self outputTextField] setStringValue:[[[NSFileManager defaultManager] currentDirectoryPath] stringByAppendingString:@"/emoji"]];
+}
+- (IBAction)pickInputFile:(id)sender {
+ NSOpenPanel* panel=[NSOpenPanel openPanel];
+
+ [panel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result){
+ if (result == NSFileHandlingPanelOKButton) {
+ [[self inputTextField] setStringValue:[panel filename]];
+ }
+ }];
+}
+
+- (IBAction)pickOutputFolder:(id)sender {
+ NSOpenPanel* panel=[NSOpenPanel openPanel];
+ [panel setCanChooseDirectories:true];
+ [panel setCanChooseFiles:false];
+ [panel setCanCreateDirectories:true];
+ [panel setDirectory:[[self outputTextField] stringValue]];
+ [panel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result){
+ if (result == NSFileHandlingPanelOKButton) {
+ [[self outputTextField] setStringValue:[panel filename]];
+ }
+ }];
+}
+
+NSString *trimString(NSString* string) {
+ return [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+}
+
+unsigned int parseChar(NSString *string) {
+ unsigned int result = 0;
+ NSScanner *scanner = [NSScanner scannerWithString:string];
+
+ [scanner setScanLocation:0]; // bypass '#' character
+ [scanner scanHexInt:&result];
+
+ return result;
+}
+
+NSString *stringFromChar(unsigned int value) {
+ UTF32Char inputChar = value; // input UTF32 value
+ inputChar = NSSwapHostIntToLittle(inputChar); // swap to little-endian if necessary
+ NSString *str = [[NSString alloc] initWithBytes:&inputChar length:4 encoding:NSUTF32LittleEndianStringEncoding];
+ return str;
+}
+
+- (IBAction)doThat:(id)sender {
+ NSString *fontPath = [[self inputTextField] stringValue];
+ NSString *dir = [[self outputTextField] stringValue];
+
+ CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);
+
+ // Create the font with the data provider, then release the data provider.
+ CGFontRef fontRef = CGFontCreateWithDataProvider( dataProvider );
+
+ CTFontRef fontCore = CTFontCreateWithGraphicsFont(fontRef, FONT_SIZE, NULL, NULL);
+ CGDataProviderRelease(dataProvider);
+ CGFontRelease(fontRef);
+ NSFont *font = (__bridge NSFont*)fontCore;
+
+ NSString *emojiDataFile = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"emoji-data" ofType:@"txt"] encoding:NSUTF8StringEncoding error:nil];
+ NSArray *lines = [emojiDataFile componentsSeparatedByString:@"\n"];
+
+ NSMutableArray *emoji = [NSMutableArray new];
+
+ emojiDataFile = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"emoji-test" ofType:@"txt"] encoding:NSUTF8StringEncoding error:nil];
+ lines = [emojiDataFile componentsSeparatedByString:@"\n"];
+
+ NSMutableArray *unicodes = [NSMutableArray new];
+
+ for(NSString *line in lines) {
+ if([line length] == 0 || [line characterAtIndex:0] ==';') {
+ continue;
+ }
+
+ NSArray *parts = [line componentsSeparatedByString:@";"];
+ if (parts.count < 2) {
+ continue;
+ }
+ NSString *format = trimString(parts[0]);
+ NSArray *emojiArray = [trimString(parts[1]) componentsSeparatedByString:@"# "];
+ if (emojiArray.count < 2) {
+ continue;
+ }
+
+ NSString *emojiStr = [emojiArray[1] componentsSeparatedByString:@" "][0];
+
+ NSString *emojiUnicode = @"";
+ NSString *fileNameStr = @"";
+ for (NSUInteger i = 0; i < [emojiStr length]; i++) {
+ unichar c = [emojiStr characterAtIndex:i];
+ NSString *unicode = [NSString stringWithFormat:@"%04x", (unsigned)c];
+
+
+ if (i + 1 == [emojiStr length] && [unicode isEqualToString:@"fe0f"]) {
+ continue;
+ }
+
+
+ fileNameStr = [fileNameStr stringByAppendingString:[[NSString stringWithFormat:@"%lX_", (long)c] lowercaseString]];
+ emojiUnicode = [emojiUnicode stringByAppendingString:[NSString stringWithFormat:@"\\\\u%@", [unicode uppercaseString]]];
+ }
+
+ if ([unicodes indexOfObject:emojiUnicode] == NSNotFound) {
+ [unicodes addObject:emojiUnicode];
+ }
+
+ int i = 0;
+
+ fileNameStr = [fileNameStr substringToIndex:fileNameStr.length - 1];
+ drawString(emojiStr, fileNameStr, dir, font);
+ }
+
+
+ NSArray *unicodesArray = [unicodes sortedArrayUsingComparator:^NSComparisonResult(NSString *a, NSString *b) {
+ return a.length > b.length ? NSOrderedAscending : NSOrderedDescending;
+ }];
+
+ NSString *unicodesString = [unicodesArray componentsJoinedByString:@"|"];
+ NSData *unicodesStringData = [unicodesString dataUsingEncoding:NSUTF8StringEncoding];
+ [unicodesStringData writeToFile:[NSString stringWithFormat:@"%@/%@", dir, @"unicodes.txt"] atomically:true];
+}
+
+NSString *stringFromCodes(NSString *codes) {
+ NSArray *codesArray = [codes componentsSeparatedByString:@" "];
+ NSString *textCode = @"";
+ for(NSString *string in codesArray) {
+ unsigned result = 0;
+ NSScanner *scanner = [NSScanner scannerWithString:string];
+ [scanner scanHexInt:&result];
+
+ unichar characterArray[2];
+ CFStringGetSurrogatePairForLongCharacter(result, characterArray);
+
+ if(characterArray[1] != 0) {
+ textCode = [NSString stringWithFormat:@"%@%2X%2X", textCode, characterArray[0], characterArray[1]];
+ } else {
+ textCode = [NSString stringWithFormat:@"%@%2X", textCode, characterArray[0]];
+ }
+ }
+ return textCode;
+}
+
+
+void drawString(NSString* str, NSString* fileName, NSString* dir, NSFont* font){
+ fileName = [[fileName stringByReplacingOccurrencesOfString:@" " withString:@"-"] lowercaseString];
+
+ NSArray *array = @[@"1f5e8", @"23cf", @"0023", @"002a", @"0030", @"0031", @"0032", @"0033", @"0034", @"0035", @"0036", @"0037", @"0038", @"0039", @"1f1e6", @"1f1e7", @"1f1e8", @"1f1e9", @"1f1ea", @"1f1eb", @"1f1ec", @"1f1ed", @"1f1ee", @"1f1ef", @"1f1f0", @"1f1f1", @"1f1f2", @"1f1f3", @"1f1f4", @"1f1f5", @"1f1f6", @"1f1f7", @"1f1f8", @"1f1f9", @"1f1fa", @"1f1fb", @"1f1fc", @"1f1fd", @"1f1fe", @"1f1ff"];
+
+ if([array indexOfObject:fileName] != NSNotFound) {
+ return;
+ }
+
+ NSBitmapImageRep *offscreenRep = [[NSBitmapImageRep alloc]
+ initWithBitmapDataPlanes:NULL
+ pixelsWide:SIZE
+ pixelsHigh:SIZE
+ bitsPerSample:8
+ samplesPerPixel:4
+ hasAlpha:YES
+ isPlanar:NO
+ colorSpaceName:NSDeviceRGBColorSpace
+ bitmapFormat:NSAlphaFirstBitmapFormat
+ bytesPerRow:0
+ bitsPerPixel:0];
+ NSGraphicsContext *g = [NSGraphicsContext graphicsContextWithBitmapImageRep:offscreenRep];
+ [NSGraphicsContext saveGraphicsState];
+ [NSGraphicsContext setCurrentContext:g];
+
+ //NSFont* font=[NSFont fontWithName:@"Apple Color Emoji" size:96];
+ NSDictionary* d=[NSDictionary dictionaryWithObjectsAndKeys: font, NSFontAttributeName, nil];
+ NSRect rect=[font boundingRectForGlyph:[font glyphWithName:str]];
+
+ [str drawAtPoint:CGPointMake(0, OFFSET) withAttributes:d];
+
+
+ NSData *data = [offscreenRep representationUsingType: NSPNGFileType properties: nil];
+
+ [data writeToFile: [NSString stringWithFormat:@"%@/%@.png", dir, fileName] atomically: NO];
+ //NSLog(@"Draw %@ OK [%@] [%f %f %f %f]", str, fileName, rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
+}
+
+- (IBAction)outputTextField:(id)sender {
+}
+@end