diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..e021f6e
Binary files /dev/null and b/.DS_Store differ
diff --git a/ESJsonFormat.xcodeproj/xcshareddata/xcschemes/ESJsonFormat.xcscheme.orig b/ESJsonFormat.xcodeproj/xcshareddata/xcschemes/ESJsonFormat.xcscheme.orig
new file mode 100755
index 0000000..a94a49f
--- /dev/null
+++ b/ESJsonFormat.xcodeproj/xcshareddata/xcschemes/ESJsonFormat.xcscheme.orig
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ language = ""
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "NO"
+ debugXPCServices = "NO"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "NO"
+ viewDebuggingEnabled = "No">
+<<<<<<< HEAD
+=======
+
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ESJsonFormat/Controller/ESDialogController.xib.orig b/ESJsonFormat/Controller/ESDialogController.xib.orig
new file mode 100644
index 0000000..ab3691e
--- /dev/null
+++ b/ESJsonFormat/Controller/ESDialogController.xib.orig
@@ -0,0 +1,108 @@
+<<<<<<< HEAD
+
+
+
+
+=======
+
+
+
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<<<<<<< HEAD
+
+=======
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ESJsonFormat/Controller/ESInputJsonController.xib.orig b/ESJsonFormat/Controller/ESInputJsonController.xib.orig
new file mode 100644
index 0000000..a964506
--- /dev/null
+++ b/ESJsonFormat/Controller/ESInputJsonController.xib.orig
@@ -0,0 +1,112 @@
+<<<<<<< HEAD
+
+
+
+
+=======
+
+
+
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<<<<<<< HEAD
+
+=======
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ESJsonFormat/Controller/ESSettingController.m b/ESJsonFormat/Controller/ESSettingController.m
index e91e7a0..ff1a0a4 100644
--- a/ESJsonFormat/Controller/ESSettingController.m
+++ b/ESJsonFormat/Controller/ESSettingController.m
@@ -11,6 +11,7 @@
@interface ESSettingController ()
@property (weak) IBOutlet NSButton *btnImpMJExtesion;
+@property (weak) IBOutlet NSButton *btnImpYYModel;
@property (weak) IBOutlet NSButton *btnGeneric;
@property (weak) IBOutlet NSButton *btnOutputToFile;
@property (weak) IBOutlet NSButton *btnUpercaseForId;
@@ -22,8 +23,30 @@ @implementation ESSettingController
- (void)windowDidLoad {
[super windowDidLoad];
-
- self.btnImpMJExtesion.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] impOjbClassInArray];
+ switch ([[ESJsonFormatSetting defaultSetting] impOjbClassInArray]) {
+ case ImpOjbClassInArrayType_None:
+ {
+ self.btnImpMJExtesion.state = NSOffState;
+ self.btnImpYYModel.state = NSOffState;
+ }
+ break;
+ case ImpOjbClassInArrayType_MJExtension:
+ {
+ self.btnImpMJExtesion.state = NSOnState;
+ self.btnImpYYModel.state = NSOffState;
+ }
+ break;
+ case ImpOjbClassInArrayType_YYModel:
+ {
+ self.btnImpMJExtesion.state = NSOffState;
+ self.btnImpYYModel.state = NSOnState;
+ }
+ break;
+
+ default:
+ break;
+ }
+// self.btnImpMJExtesion.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] impOjbClassInArray];
self.btnGeneric.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] useGeneric];
self.btnOutputToFile.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] outputToFiles];
self.btnUpercaseForId.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] uppercaseKeyWordForId];
@@ -32,8 +55,24 @@ - (void)windowDidLoad {
}
}
+- (IBAction)btnImpMtdForYYClick:(NSButton *)sender {
+ [[ESJsonFormatSetting defaultSetting] setImpOjbClassInArray:sender.state?ImpOjbClassInArrayType_YYModel:ImpOjbClassInArrayType_None];
+ if (sender.state) {
+ self.btnImpMJExtesion.state = NSOffState;
+
+
+// [self btnImpMtdForMJClick:self.btnImpMJExtesion];
+ }
+
+}
+
- (IBAction)btnImpMtdForMJClick:(NSButton *)sender {
- [[ESJsonFormatSetting defaultSetting] setImpOjbClassInArray:sender.state];
+ [[ESJsonFormatSetting defaultSetting] setImpOjbClassInArray:sender.state?ImpOjbClassInArrayType_MJExtension:ImpOjbClassInArrayType_None];
+ if (sender.state) {
+ self.btnImpYYModel.state = NSOffState;
+// [self btnImpMtdForYYClick:self.btnImpYYModel];
+ }
+
}
- (IBAction)btnUseGenericClick:(NSButton *)sender {
@@ -49,11 +88,19 @@ - (IBAction)btnUpercaseKeyWordForIdClick:(NSButton *)sender {
}
-- (IBAction)tapGes:(NSClickGestureRecognizer *)sender {
+- (IBAction)tapMJGes:(NSClickGestureRecognizer *)sender {
+
NSURL* url = [[ NSURL alloc ] initWithString :@"http://t.cn/RLarUfg"];
[[NSWorkspace sharedWorkspace] openURL:url];
}
+- (IBAction)tapYYGes:(id)sender {
+ NSURL* url = [[ NSURL alloc ] initWithString :@"http://dwz.cn/3smhbO"];
+ [[NSWorkspace sharedWorkspace] openURL:url];
+}
+
+
+
@end
diff --git a/ESJsonFormat/Controller/ESSettingController.m.orig b/ESJsonFormat/Controller/ESSettingController.m.orig
new file mode 100644
index 0000000..9a4be8e
--- /dev/null
+++ b/ESJsonFormat/Controller/ESSettingController.m.orig
@@ -0,0 +1,126 @@
+//
+// ESSettingController.m
+// ESJsonFormat
+//
+// Created by 尹桥印 on 15/7/19.
+// Copyright (c) 2015年 EnjoySR. All rights reserved.
+//
+
+#import "ESSettingController.h"
+#import "ESJsonFormatSetting.h"
+
+@interface ESSettingController ()
+@property (weak) IBOutlet NSButton *btnImpMJExtesion;
+<<<<<<< HEAD
+@property (weak) IBOutlet NSButton *btnImpYYModel;
+=======
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+@property (weak) IBOutlet NSButton *btnGeneric;
+@property (weak) IBOutlet NSButton *btnOutputToFile;
+@property (weak) IBOutlet NSButton *btnUpercaseForId;
+
+@end
+
+@implementation ESSettingController
+
+- (void)windowDidLoad {
+ [super windowDidLoad];
+
+<<<<<<< HEAD
+ switch ([[ESJsonFormatSetting defaultSetting] impOjbClassInArray]) {
+ case ImpOjbClassInArrayType_None:
+ {
+ self.btnImpMJExtesion.state = NSOffState;
+ self.btnImpYYModel.state = NSOffState;
+ }
+ break;
+ case ImpOjbClassInArrayType_MJExtension:
+ {
+ self.btnImpMJExtesion.state = NSOnState;
+ self.btnImpYYModel.state = NSOffState;
+ }
+ break;
+ case ImpOjbClassInArrayType_YYModel:
+ {
+ self.btnImpMJExtesion.state = NSOffState;
+ self.btnImpYYModel.state = NSOnState;
+ }
+ break;
+
+ default:
+ break;
+ }
+// self.btnImpMJExtesion.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] impOjbClassInArray];
+=======
+
+ self.btnImpMJExtesion.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] impOjbClassInArray];
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ self.btnGeneric.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] useGeneric];
+ self.btnOutputToFile.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] outputToFiles];
+ self.btnUpercaseForId.state = (NSCellStateValue)[[ESJsonFormatSetting defaultSetting] uppercaseKeyWordForId];
+ if (![ESUtils isXcode7AndLater]) {
+ self.btnGeneric.enabled = NO;
+ }
+}
+
+<<<<<<< HEAD
+- (IBAction)btnImpMtdForYYClick:(NSButton *)sender {
+ [[ESJsonFormatSetting defaultSetting] setImpOjbClassInArray:sender.state?ImpOjbClassInArrayType_YYModel:ImpOjbClassInArrayType_None];
+ if (sender.state) {
+ self.btnImpMJExtesion.state = NSOffState;
+
+
+// [self btnImpMtdForMJClick:self.btnImpMJExtesion];
+ }
+
+}
+
+- (IBAction)btnImpMtdForMJClick:(NSButton *)sender {
+ [[ESJsonFormatSetting defaultSetting] setImpOjbClassInArray:sender.state?ImpOjbClassInArrayType_MJExtension:ImpOjbClassInArrayType_None];
+ if (sender.state) {
+ self.btnImpYYModel.state = NSOffState;
+// [self btnImpMtdForYYClick:self.btnImpYYModel];
+ }
+
+=======
+- (IBAction)btnImpMtdForMJClick:(NSButton *)sender {
+ [[ESJsonFormatSetting defaultSetting] setImpOjbClassInArray:sender.state];
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+}
+
+- (IBAction)btnUseGenericClick:(NSButton *)sender {
+ [[ESJsonFormatSetting defaultSetting] setUseGeneric:sender.state];
+}
+
+- (IBAction)btnOutputToFilesClick:(NSButton *)sender {
+ [[ESJsonFormatSetting defaultSetting] setOutputToFiles:sender.state];
+}
+
+- (IBAction)btnUpercaseKeyWordForIdClick:(NSButton *)sender {
+ [[ESJsonFormatSetting defaultSetting] setUppercaseKeyWordForId:sender.state];
+}
+
+
+<<<<<<< HEAD
+- (IBAction)tapMJGes:(NSClickGestureRecognizer *)sender {
+
+=======
+- (IBAction)tapGes:(NSClickGestureRecognizer *)sender {
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ NSURL* url = [[ NSURL alloc ] initWithString :@"http://t.cn/RLarUfg"];
+ [[NSWorkspace sharedWorkspace] openURL:url];
+}
+
+
+
+<<<<<<< HEAD
+- (IBAction)tapYYGes:(id)sender {
+ NSURL* url = [[ NSURL alloc ] initWithString :@"http://dwz.cn/3smhbO"];
+ [[NSWorkspace sharedWorkspace] openURL:url];
+}
+
+
+
+=======
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+@end
diff --git a/ESJsonFormat/Controller/ESSettingController.xib b/ESJsonFormat/Controller/ESSettingController.xib
index 8a380ef..6ad23f3 100644
--- a/ESJsonFormat/Controller/ESSettingController.xib
+++ b/ESJsonFormat/Controller/ESSettingController.xib
@@ -1,13 +1,15 @@
-
-
+
+
-
+
+
+
@@ -17,14 +19,14 @@
-
-
+
+
-
+
-
+
-
+
-
+
@@ -69,7 +71,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
+
diff --git a/ESJsonFormat/Controller/ESSettingController.xib.orig b/ESJsonFormat/Controller/ESSettingController.xib.orig
new file mode 100644
index 0000000..d1cb70e
--- /dev/null
+++ b/ESJsonFormat/Controller/ESSettingController.xib.orig
@@ -0,0 +1,188 @@
+<<<<<<< HEAD
+
+
+
+
+
+=======
+
+
+
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
+
+
+
+<<<<<<< HEAD
+
+=======
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
+
+
+
+
+
+
+<<<<<<< HEAD
+
+
+
+
+
+
+
+
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
+
+
+
+<<<<<<< HEAD
+
+
+
+
+
+=======
+
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
+
+
+
+<<<<<<< HEAD
+
+=======
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+
diff --git a/ESJsonFormat/ESJsonFormat.m b/ESJsonFormat/ESJsonFormat.m
index 9eb4170..d0a052a 100755
--- a/ESJsonFormat/ESJsonFormat.m
+++ b/ESJsonFormat/ESJsonFormat.m
@@ -139,7 +139,7 @@ -(void)outputResult:(NSNotification*)noti{
//输出RootClass的impOjbClassInArray方法
if ([ESJsonFormatSetting defaultSetting].impOjbClassInArray) {
- NSString *methodStr = [ESJsonFormatManager methodContentOfObjectClassInArrayWithClassInfo:classInfo];
+ NSString *methodStr = [ESJsonFormatManager methodContentOfObjectClassInArrayWithClassInfo:classInfo ImpOjbClassInArrayType:[ESJsonFormatSetting defaultSetting].impOjbClassInArray];
if (methodStr.length) {
NSRange lastEndRange = [originalContent rangeOfString:@"@end"];
if (lastEndRange.location != NSNotFound) {
diff --git a/ESJsonFormat/ESJsonFormat.m.orig b/ESJsonFormat/ESJsonFormat.m.orig
new file mode 100755
index 0000000..c63230f
--- /dev/null
+++ b/ESJsonFormat/ESJsonFormat.m.orig
@@ -0,0 +1,233 @@
+//
+// ESJsonFormat.m
+// ESJsonFormat
+//
+// Created by 尹桥印 on 15/6/28.
+// Copyright (c) 2015年 EnjoySR. All rights reserved.
+//
+
+#import "ESJsonFormat.h"
+#import "ESJsonFormatManager.h"
+#import "ESFormatInfo.h"
+#import "ESInputJsonController.h"
+#import "ESSettingController.h"
+#import "ESPbxprojInfo.h"
+#import "ESJsonFormatSetting.h"
+#import "ESClassInfo.h"
+
+@interface ESJsonFormat()
+@property (nonatomic, strong) ESInputJsonController *inputCtrl;
+@property (nonatomic, strong) ESSettingController *settingCtrl;
+@property (nonatomic, strong) id eventMonitor;
+@property (nonatomic, strong, readwrite) NSBundle *bundle;
+@property (nonatomic, copy) NSString *currentFilePath;
+@property (nonatomic, copy) NSString *currentProjectPath;
+@property (nonatomic) NSTextView *currentTextView;
+@property (nonatomic, assign) BOOL notiTag;
+
+@end
+
+@implementation ESJsonFormat
+
++ (instancetype)sharedPlugin{
+ return sharedPlugin;
+}
+
++ (instancetype)instance{
+ return instance;
+}
+
+- (id)initWithBundle:(NSBundle *)plugin
+{
+ if (self = [super init]) {
+ // reference to plugin's bundle, for resource access
+ self.bundle = plugin;
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(didApplicationFinishLaunchingNotification:)
+ name:NSApplicationDidFinishLaunchingNotification
+ object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(outputResult:) name:ESFormatResultNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationLog:) name:NSTextViewDidChangeSelectionNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationLog:) name:@"IDEEditorDocumentDidChangeNotification" object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationLog:) name:@"PBXProjectDidOpenNotification" object:nil];
+<<<<<<< HEAD
+=======
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationLog:) name:@"SourceEditorSelectedSourceRangeChangedNotification" object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationLog:) name:@"IDEWorkspaceDocumentWillWriteStateDataNotification" object:nil];
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ }
+ instance = self;
+ return self;
+}
+
+- (void)notificationLog:(NSNotification *)notify
+{
+<<<<<<< HEAD
+ if (!self.notiTag) return;
+ if ([notify.name isEqualToString:NSTextViewDidChangeSelectionNotification]) {
+ if ([notify.object isKindOfClass:[NSTextView class]]) {
+=======
+
+ if (!self.notiTag) return;
+ if ([notify.name isEqualToString:NSTextViewDidChangeSelectionNotification]) {
+ if ([notify.object isKindOfClass:NSClassFromString(@"DVTSourceTextView")]) {
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ NSTextView *text = (NSTextView *)notify.object;
+ self.currentTextView = text;
+ }
+ }else if ([notify.name isEqualToString:@"IDEEditorDocumentDidChangeNotification"]){
+ //Track the current open paths
+ NSObject *array = notify.userInfo[@"IDEEditorDocumentChangeLocationsKey"];
+ NSURL *url = [[array valueForKey:@"documentURL"] firstObject];
+ if (![url isKindOfClass:[NSNull class]]) {
+ NSString *path = [url absoluteString];
+ self.currentFilePath = path;
+ if ([self.currentFilePath hasSuffix:@"swift"]) {
+ self.swift = YES;
+ }else{
+ self.swift = NO;
+ }
+ }
+ }else if ([notify.name isEqualToString:@"PBXProjectDidOpenNotification"]){
+ self.currentProjectPath = [notify.object valueForKey:@"path"];
+ [[ESPbxprojInfo shareInstance] setParamsWithPath:[self.currentProjectPath stringByAppendingPathComponent:@"project.pbxproj"]];
+<<<<<<< HEAD
+ }
+=======
+ }else if ([notify.name isEqualToString:@"SourceEditorSelectedSourceRangeChangedNotification"]) {
+ // 适配 Xcode 9,在Xcode 9 中代码编辑区域的 View 类型如下,继承于 NSView,但使用方式与 NSTextView 类似
+ if ([notify.object isKindOfClass:NSClassFromString(@"IDEPegasusSourceEditor.SourceCodeEditorView")]) {
+ self.currentTextView = notify.object;
+ }
+ }else if ([notify.name isEqualToString:@"IDEWorkspaceDocumentWillWriteStateDataNotification"]) {
+ NSArray *recentEditorDocumentURLs = [notify.object valueForKey:@"_recentEditorDocumentURLs"];
+ NSString *path = [recentEditorDocumentURLs.firstObject absoluteString];
+ if ([path hasPrefix:@"file"]) {
+ self.currentFilePath = path;
+ }
+ }
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+}
+
+-(void)outputResult:(NSNotification*)noti{
+ ESClassInfo *classInfo = noti.object;
+ if ([ESJsonFormatSetting defaultSetting].outputToFiles) {
+ //选择保存路径
+ NSOpenPanel *panel = [NSOpenPanel openPanel];
+ [panel setTitle:@"ESJsonFormat"];
+ [panel setCanChooseDirectories:YES];
+ [panel setCanCreateDirectories:YES];
+ [panel setCanChooseFiles:NO];
+
+ if ([panel runModal] == NSModalResponseOK) {
+ NSString *folderPath = [[[panel URLs] objectAtIndex:0] relativePath];
+ [classInfo createFileWithFolderPath:folderPath];
+ [[NSWorkspace sharedWorkspace] openFile:folderPath];
+ }
+
+ }else{
+ if (!self.currentTextView) return;
+ if (!self.isSwift) {
+ //先添加主类的属性
+ [self.currentTextView insertText:classInfo.propertyContent];
+
+ //再添加把其他类的的字符串拼接到最后面
+ [self.currentTextView insertText:classInfo.classInsertTextViewContentForH replacementRange:NSMakeRange(self.currentTextView.string.length, 0)];
+
+ //@class
+ NSString *atClassContent = classInfo.atClassContent;
+ if (atClassContent.length>0) {
+ NSRange atInsertRange = [self.currentTextView.string rangeOfString:@"\n@interface"];
+ if (atInsertRange.location != NSNotFound) {
+ [self.currentTextView insertText:[NSString stringWithFormat:@"\n%@",atClassContent] replacementRange:NSMakeRange(atInsertRange.location, 0)];
+ }
+ }
+
+ //再添加.m文件的内容
+ NSString *urlStr = [NSString stringWithFormat:@"%@m",[self.currentFilePath substringWithRange:NSMakeRange(0, self.currentFilePath.length-1)]] ;
+ NSURL *writeUrl = [NSURL URLWithString:urlStr];
+ //The original content
+ NSString *originalContent = [NSString stringWithContentsOfURL:writeUrl encoding:NSUTF8StringEncoding error:nil];
+
+ //输出RootClass的impOjbClassInArray方法
+ if ([ESJsonFormatSetting defaultSetting].impOjbClassInArray) {
+<<<<<<< HEAD
+ NSString *methodStr = [ESJsonFormatManager methodContentOfObjectClassInArrayWithClassInfo:classInfo ImpOjbClassInArrayType:[ESJsonFormatSetting defaultSetting].impOjbClassInArray];
+=======
+ NSString *methodStr = [ESJsonFormatManager methodContentOfObjectClassInArrayWithClassInfo:classInfo];
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ if (methodStr.length) {
+ NSRange lastEndRange = [originalContent rangeOfString:@"@end"];
+ if (lastEndRange.location != NSNotFound) {
+ originalContent = [originalContent stringByReplacingCharactersInRange:NSMakeRange(lastEndRange.location, 0) withString:methodStr];
+ }
+ }
+ }
+ originalContent = [originalContent stringByReplacingCharactersInRange:NSMakeRange(originalContent.length, 0) withString:classInfo.classInsertTextViewContentForM];
+ [originalContent writeToURL:writeUrl atomically:YES encoding:NSUTF8StringEncoding error:nil];
+
+ }else{
+ //Swift
+ [self.currentTextView insertText:classInfo.propertyContent];
+
+ //再添加把其他类的的字符串拼接到最后面
+ [self.currentTextView insertText:classInfo.classInsertTextViewContentForH replacementRange:NSMakeRange(self.currentTextView.string.length, 0)];
+ }
+ }
+}
+
+- (void)didApplicationFinishLaunchingNotification:(NSNotification*)noti{
+ self.notiTag = YES;
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:NSApplicationDidFinishLaunchingNotification object:nil];
+ NSMenuItem *menuItem = [[NSApp mainMenu] itemWithTitle:@"Window"];
+ if (menuItem) {
+
+ NSMenu *menu = [[NSMenu alloc] init];
+
+ //Input JSON window
+ NSMenuItem *inputJsonWindow = [[NSMenuItem alloc] initWithTitle:@"Input JSON window" action:@selector(showInputJsonWindow:) keyEquivalent:@"J"];
+ [inputJsonWindow setKeyEquivalentModifierMask:NSAlphaShiftKeyMask | NSControlKeyMask];
+ inputJsonWindow.target = self;
+ [menu addItem:inputJsonWindow];
+
+ //Setting
+ NSMenuItem *settingWindow = [[NSMenuItem alloc] initWithTitle:@"Setting" action:@selector(showSettingWindow:) keyEquivalent:@""];
+ settingWindow.target = self;
+ [menu addItem:settingWindow];
+
+ NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:@"ESJsonFormat" action:nil keyEquivalent:@""];
+ item.submenu = menu;
+
+ [[menuItem submenu] addItem:item];
+ }
+}
+
+- (void)showInputJsonWindow:(NSMenuItem *)item{
+
+ if (!(self.currentTextView && self.currentFilePath)) {
+ NSError *error = [NSError errorWithDomain:@"Current state is not edit!" code:0 userInfo:nil];
+ NSAlert *alert = [NSAlert alertWithError:error];
+ [alert runModal];
+ return;
+ }
+ self.notiTag = NO;
+ self.inputCtrl = [[ESInputJsonController alloc] initWithWindowNibName:@"ESInputJsonController"];
+ self.inputCtrl.delegate = self;
+ [self.inputCtrl showWindow:self.inputCtrl];
+}
+
+- (void)showSettingWindow:(NSMenuItem *)item{
+ self.settingCtrl = [[ESSettingController alloc] initWithWindowNibName:@"ESSettingController"];
+ [self.settingCtrl showWindow:self.settingCtrl];
+}
+
+-(void)windowWillClose{
+ self.notiTag = YES;
+}
+- (void)dealloc{
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+
+@end
diff --git a/ESJsonFormat/ESJsonFormatManager.h b/ESJsonFormat/ESJsonFormatManager.h
index e1cb98a..bd74081 100644
--- a/ESJsonFormat/ESJsonFormatManager.h
+++ b/ESJsonFormat/ESJsonFormatManager.h
@@ -7,6 +7,7 @@
//
#import
+#import "ESJsonFormatSetting.h"
@class ESClassInfo;
@interface ESJsonFormatManager : NSObject
@@ -46,7 +47,7 @@
*
* @return
*/
-+ (NSString *)methodContentOfObjectClassInArrayWithClassInfo:(ESClassInfo *)classInfo;
++ (NSString *)methodContentOfObjectClassInArrayWithClassInfo:(ESClassInfo *)classInfo ImpOjbClassInArrayType:(ImpOjbClassInArrayType)modelType;
/**
diff --git a/ESJsonFormat/ESJsonFormatManager.h.orig b/ESJsonFormat/ESJsonFormatManager.h.orig
new file mode 100644
index 0000000..e463f17
--- /dev/null
+++ b/ESJsonFormat/ESJsonFormatManager.h.orig
@@ -0,0 +1,69 @@
+//
+// ESJsonFormatManager.h
+// ESJsonFormat
+//
+// Created by 尹桥印 on 15/6/28.
+// Copyright (c) 2015年 EnjoySR. All rights reserved.
+//
+
+#import
+<<<<<<< HEAD
+#import "ESJsonFormatSetting.h"
+=======
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+@class ESClassInfo;
+@interface ESJsonFormatManager : NSObject
+
+/**
+ * 解析一个类里面属性字段的内容
+ *
+ * @param classInfo 类信息
+ *
+ * @return
+ */
++ (NSString *)parsePropertyContentWithClassInfo:(ESClassInfo *)classInfo;
+
+/**
+ * 解析一个类头文件的内容(会根据是否创建文件返回的内容有所不同)
+ *
+ * @param classInfo 类信息
+ *
+ * @return 类头文件里面的内容
+ */
++ (NSString *)parseClassHeaderContentWithClassInfo:(ESClassInfo *)classInfo;
+
+
+/**
+ * 解析一个类实现文件内容 (仅对OC有效)
+ *
+ * @param classInfo 类信息
+ *
+ * @return 实现文件里面的内容
+ */
++ (NSString *)parseClassImpContentWithClassInfo:(ESClassInfo *)classInfo;
+
+
+/**
+ * 生成 MJExtension2.0 的集合中指定对象的方法
+ *
+ * @param classInfo 指定类信息
+ *
+ * @return
+ */
+<<<<<<< HEAD
++ (NSString *)methodContentOfObjectClassInArrayWithClassInfo:(ESClassInfo *)classInfo ImpOjbClassInArrayType:(ImpOjbClassInArrayType)modelType;
+=======
++ (NSString *)methodContentOfObjectClassInArrayWithClassInfo:(ESClassInfo *)classInfo;
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+
+
+/**
+ * 创建文件
+ *
+ * @param folderPath 输出的文件夹路径
+ * @param classInfo 类信息
+ */
++ (void)createFileWithFolderPath:(NSString *)folderPath classInfo:(ESClassInfo *)classInfo;
+
+
+@end
diff --git a/ESJsonFormat/ESJsonFormatManager.m b/ESJsonFormat/ESJsonFormatManager.m
index c4085d5..96c2ad4 100644
--- a/ESJsonFormat/ESJsonFormatManager.m
+++ b/ESJsonFormat/ESJsonFormatManager.m
@@ -167,7 +167,7 @@ + (NSString *)parseClassImpContentWithClassInfo:(ESClassInfo *)classInfo{
NSMutableString *result = [NSMutableString stringWithString:@""];
if ([ESJsonFormatSetting defaultSetting].impOjbClassInArray) {
- [result appendFormat:@"@implementation %@\n%@\n@end\n",classInfo.className,[self methodContentOfObjectClassInArrayWithClassInfo:classInfo]];
+ [result appendFormat:@"@implementation %@\n%@\n@end\n",classInfo.className,[self methodContentOfObjectClassInArrayWithClassInfo:classInfo ImpOjbClassInArrayType:[ESJsonFormatSetting defaultSetting].impOjbClassInArray]];
}else{
[result appendFormat:@"@implementation %@\n\n@end\n",classInfo.className];
}
@@ -237,7 +237,7 @@ + (NSString *)parseClassContentForSwiftWithClassInfo:(ESClassInfo *)classInfo{
*
* @return
*/
-+ (NSString *)methodContentOfObjectClassInArrayWithClassInfo:(ESClassInfo *)classInfo{
++ (NSString *)methodContentOfObjectClassInArrayWithClassInfo:(ESClassInfo *)classInfo ImpOjbClassInArrayType:(ImpOjbClassInArrayType)modelType{
if (classInfo.propertyArrayDic.count==0) {
return @"";
}else{
@@ -250,7 +250,19 @@ + (NSString *)methodContentOfObjectClassInArrayWithClassInfo:(ESClassInfo *)clas
result = [NSMutableString stringWithFormat:@"%@",[result substringToIndex:result.length-2]];
}
//append method content (objectClassInArray)
- NSString *methodStr = [NSString stringWithFormat:@"\n+ (NSDictionary *)objectClassInArray{\n return @{%@};\n}\n",result];
+ NSString * impString;
+ switch (modelType) {
+ case ImpOjbClassInArrayType_MJExtension:
+ impString = @"objectClassInArray";
+ break;
+ case ImpOjbClassInArrayType_YYModel:
+ impString = @"modelContainerPropertyGenericClass";
+ break;
+
+ default:
+ break;
+ }
+ NSString *methodStr = [NSString stringWithFormat:@"\n+ (NSDictionary *)%@{\n return @{%@};\n}\n",impString,result];
return methodStr;
}
}
diff --git a/ESJsonFormat/ESJsonFormatManager.m.orig b/ESJsonFormat/ESJsonFormatManager.m.orig
new file mode 100644
index 0000000..4002a40
--- /dev/null
+++ b/ESJsonFormat/ESJsonFormatManager.m.orig
@@ -0,0 +1,371 @@
+//
+// ESJsonFormatManager.m
+// ESJsonFormat
+//
+// Created by 尹桥印 on 15/6/28.
+// Copyright (c) 2015年 EnjoySR. All rights reserved.
+//
+
+#import "ESJsonFormatManager.h"
+#import "ESClassInfo.h"
+#import "ESFormatInfo.h"
+#import "ESClassInfo.h"
+#import "ESPair.h"
+#import "ESJsonFormat.h"
+<<<<<<< HEAD
+
+=======
+#import "ESJsonFormatSetting.h"
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+#import "ESPbxprojInfo.h"
+#import "ESClassInfo.h"
+
+
+@interface ESJsonFormatManager()
+
+@end
+@implementation ESJsonFormatManager
+
++ (NSString *)parsePropertyContentWithClassInfo:(ESClassInfo *)classInfo{
+ NSMutableString *resultStr = [NSMutableString string];
+ NSDictionary *dic = classInfo.classDic;
+ [dic enumerateKeysAndObjectsUsingBlock:^(id key, NSObject *obj, BOOL *stop) {
+ if ([ESJsonFormat instance].isSwift) {
+ [resultStr appendFormat:@"\n%@\n",[self formatSwiftWithKey:key value:obj classInfo:classInfo]];
+ }else{
+ [resultStr appendFormat:@"\n%@\n",[self formatObjcWithKey:key value:obj classInfo:classInfo]];
+ }
+ }];
+ return resultStr;
+}
+
+/**
+ * 格式化OC属性字符串
+ *
+ * @param key JSON里面key字段
+ * @param value JSON里面key对应的NSDiction或者NSArray
+ * @param classInfo 类信息
+ *
+ * @return
+ */
++ (NSString *)formatObjcWithKey:(NSString *)key value:(NSObject *)value classInfo:(ESClassInfo *)classInfo{
+ NSString *qualifierStr = @"copy";
+ NSString *typeStr = @"NSString";
+ //判断大小写
+ if ([ESUppercaseKeyWords containsObject:key] && [ESJsonFormatSetting defaultSetting].uppercaseKeyWordForId) {
+ key = [key uppercaseString];
+ }
+ if ([value isKindOfClass:[NSString class]]) {
+ return [NSString stringWithFormat:@"@property (nonatomic, %@) %@ *%@;",qualifierStr,typeStr,key];
+ }else if([value isKindOfClass:[@(YES) class]]){
+ //the 'NSCFBoolean' is private subclass of 'NSNumber'
+ qualifierStr = @"assign";
+ typeStr = @"BOOL";
+ return [NSString stringWithFormat:@"@property (nonatomic, %@) %@ %@;",qualifierStr,typeStr,key];
+ }else if([value isKindOfClass:[NSNumber class]]){
+ qualifierStr = @"assign";
+ NSString *valueStr = [NSString stringWithFormat:@"%@",value];
+ if ([valueStr rangeOfString:@"."].location!=NSNotFound){
+ typeStr = @"CGFloat";
+ }else{
+ NSNumber *valueNumber = (NSNumber *)value;
+ if ([valueNumber longValue]<2147483648) {
+ typeStr = @"NSInteger";
+ }else{
+ typeStr = @"long long";
+ }
+ }
+ return [NSString stringWithFormat:@"@property (nonatomic, %@) %@ %@;",qualifierStr,typeStr,key];
+ }else if([value isKindOfClass:[NSArray class]]){
+ NSArray *array = (NSArray *)value;
+
+ //May be 'NSString',will crash
+ NSString *genericTypeStr = @"";
+ NSObject *firstObj = [array firstObject];
+ if ([firstObj isKindOfClass:[NSDictionary class]]) {
+ ESClassInfo *childInfo = classInfo.propertyArrayDic[key];
+ genericTypeStr = [NSString stringWithFormat:@"<%@ *>",childInfo.className];
+ }else if ([firstObj isKindOfClass:[NSString class]]){
+ genericTypeStr = @"";
+ }else if ([firstObj isKindOfClass:[NSNumber class]]){
+ genericTypeStr = @"";
+ }
+
+ qualifierStr = @"strong";
+ typeStr = @"NSArray";
+ if ([ESJsonFormatSetting defaultSetting].useGeneric && [ESUtils isXcode7AndLater]) {
+ return [NSString stringWithFormat:@"@property (nonatomic, %@) %@%@ *%@;",qualifierStr,typeStr,genericTypeStr,key];
+ }
+ return [NSString stringWithFormat:@"@property (nonatomic, %@) %@ *%@;",qualifierStr,typeStr,key];
+ }else if ([value isKindOfClass:[NSDictionary class]]){
+ qualifierStr = @"strong";
+ ESClassInfo *childInfo = classInfo.propertyClassDic[key];
+ typeStr = childInfo.className;
+ if (!typeStr) {
+ typeStr = [key capitalizedString];
+ }
+ return [NSString stringWithFormat:@"@property (nonatomic, %@) %@ *%@;",qualifierStr,typeStr,key];
+ }
+ return [NSString stringWithFormat:@"@property (nonatomic, %@) %@ *%@;",qualifierStr,typeStr,key];
+}
+
+
+/**
+ * 格式化Swift属性字符串
+ *
+ * @param key JSON里面key字段
+ * @param value JSON里面key对应的NSDiction或者NSArray
+ * @param classInfo 类信息
+ *
+ * @return
+ */
++ (NSString *)formatSwiftWithKey:(NSString *)key value:(NSObject *)value classInfo:(ESClassInfo *)classInfo{
+<<<<<<< HEAD
+ NSString *typeStr = @"String?";
+=======
+ NSString *typeStr = @"String";
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ //判断大小写
+ if ([ESUppercaseKeyWords containsObject:key] && [ESJsonFormatSetting defaultSetting].uppercaseKeyWordForId) {
+ key = [key uppercaseString];
+ }
+ if ([value isKindOfClass:[NSString class]]) {
+<<<<<<< HEAD
+ return [NSString stringWithFormat:@" var %@: %@",key,typeStr];
+=======
+ return [NSString stringWithFormat:@" var %@: %@ = \"\"",key,typeStr];
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ }else if([value isKindOfClass:[@(YES) class]]){
+ typeStr = @"Bool";
+ return [NSString stringWithFormat:@" var %@: %@ = false",key,typeStr];
+ }else if([value isKindOfClass:[NSNumber class]]){
+ NSString *valueStr = [NSString stringWithFormat:@"%@",value];
+ if ([valueStr rangeOfString:@"."].location!=NSNotFound){
+ typeStr = @"Double";
+ }else{
+ typeStr = @"Int";
+ }
+ return [NSString stringWithFormat:@" var %@: %@ = 0",key,typeStr];
+ }else if([value isKindOfClass:[NSArray class]]){
+ ESClassInfo *childInfo = classInfo.propertyArrayDic[key];
+ NSString *type = childInfo.className;
+ return [NSString stringWithFormat:@" var %@: [%@]?",key,type==nil?@"String":type];
+ }else if ([value isKindOfClass:[NSDictionary class]]){
+ ESClassInfo *childInfo = classInfo.propertyClassDic[key];
+ typeStr = childInfo.className;
+ if (!typeStr) {
+ typeStr = [key capitalizedString];
+ }
+ return [NSString stringWithFormat:@" var %@: %@?",key,typeStr];
+ }
+ return [NSString stringWithFormat:@" var %@: %@",key,typeStr];
+}
+
+
+
++ (NSString *)parseClassHeaderContentWithClassInfo:(ESClassInfo *)classInfo{
+ if ([ESJsonFormat instance].isSwift) {
+ return [self parseClassContentForSwiftWithClassInfo:classInfo];
+ }else{
+ return [self parseClassHeaderContentForOjbcWithClassInfo:classInfo];
+ }
+}
+
++ (NSString *)parseClassImpContentWithClassInfo:(ESClassInfo *)classInfo{
+
+ if ([ESJsonFormat instance].isSwift) {
+ return @"";
+ }
+
+ NSMutableString *result = [NSMutableString stringWithString:@""];
+ if ([ESJsonFormatSetting defaultSetting].impOjbClassInArray) {
+<<<<<<< HEAD
+ [result appendFormat:@"@implementation %@\n%@\n@end\n",classInfo.className,[self methodContentOfObjectClassInArrayWithClassInfo:classInfo ImpOjbClassInArrayType:[ESJsonFormatSetting defaultSetting].impOjbClassInArray]];
+=======
+ [result appendFormat:@"@implementation %@\n%@\n@end\n",classInfo.className,[self methodContentOfObjectClassInArrayWithClassInfo:classInfo]];
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ }else{
+ [result appendFormat:@"@implementation %@\n\n@end\n",classInfo.className];
+ }
+
+ if ([ESJsonFormatSetting defaultSetting].outputToFiles) {
+ //headerStr
+ NSMutableString *headerString = [NSMutableString stringWithString:[self dealHeaderStrWithClassInfo:classInfo type:@"m"]];
+ //import
+ [headerString appendString:[NSString stringWithFormat:@"#import \"%@.h\"\n",classInfo.className]];
+ for (NSString *key in classInfo.propertyArrayDic) {
+ ESClassInfo *childClassInfo = classInfo.propertyArrayDic[key];
+ [headerString appendString:[NSString stringWithFormat:@"#import \"%@.h\"\n",childClassInfo.className]];
+ }
+ [headerString appendString:@"\n"];
+ [result insertString:headerString atIndex:0];
+ }
+ return [result copy];
+}
+
+/**
+ * 解析.h文件内容--Objc
+ *
+ * @param classInfo 类信息
+ *
+ * @return
+ */
++ (NSString *)parseClassHeaderContentForOjbcWithClassInfo:(ESClassInfo *)classInfo{
+ NSMutableString *result = [NSMutableString stringWithFormat:@"@interface %@ : NSObject\n",classInfo.className];
+ [result appendString:classInfo.propertyContent];
+ [result appendString:@"\n@end"];
+
+ if ([ESJsonFormatSetting defaultSetting].outputToFiles) {
+ //headerStr
+ NSMutableString *headerString = [NSMutableString stringWithString:[self dealHeaderStrWithClassInfo:classInfo type:@"h"]];
+ //@class
+ [headerString appendString:[NSString stringWithFormat:@"%@\n\n",classInfo.atClassContent]];
+ [result insertString:headerString atIndex:0];
+ }
+ return [result copy];
+}
+
+/**
+ * 解析.swift文件内容--Swift
+ *
+ * @param classInfo 类信息
+ *
+ * @return
+ */
++ (NSString *)parseClassContentForSwiftWithClassInfo:(ESClassInfo *)classInfo{
+ NSMutableString *result = [NSMutableString stringWithFormat:@"class %@: NSObject {\n",classInfo.className];
+ [result appendString:classInfo.propertyContent];
+ [result appendString:@"\n}"];
+ if ([ESJsonFormatSetting defaultSetting].outputToFiles) {
+ [result insertString:@"import UIKit\n\n" atIndex:0];
+ //headerStr
+ NSMutableString *headerString = [NSMutableString stringWithString:[self dealHeaderStrWithClassInfo:classInfo type:@"swift"]];
+ [result insertString:headerString atIndex:0];
+ }
+ return [result copy];
+}
+
+
+/**
+ * 生成 MJExtension 的集合中指定对象的方法
+ *
+ * @param classInfo 指定类信息
+ *
+ * @return
+ */
+<<<<<<< HEAD
++ (NSString *)methodContentOfObjectClassInArrayWithClassInfo:(ESClassInfo *)classInfo ImpOjbClassInArrayType:(ImpOjbClassInArrayType)modelType{
+=======
++ (NSString *)methodContentOfObjectClassInArrayWithClassInfo:(ESClassInfo *)classInfo{
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ if (classInfo.propertyArrayDic.count==0) {
+ return @"";
+ }else{
+ NSMutableString *result = [NSMutableString string];
+ for (NSString *key in classInfo.propertyArrayDic) {
+ ESClassInfo *childClassInfo = classInfo.propertyArrayDic[key];
+ [result appendFormat:@"@\"%@\" : [%@ class], ",key,childClassInfo.className];
+ }
+ if ([result hasSuffix:@", "]) {
+ result = [NSMutableString stringWithFormat:@"%@",[result substringToIndex:result.length-2]];
+ }
+ //append method content (objectClassInArray)
+<<<<<<< HEAD
+ NSString * impString;
+ switch (modelType) {
+ case ImpOjbClassInArrayType_MJExtension:
+ impString = @"objectClassInArray";
+ break;
+ case ImpOjbClassInArrayType_YYModel:
+ impString = @"modelContainerPropertyGenericClass";
+ break;
+
+ default:
+ break;
+ }
+ NSString *methodStr = [NSString stringWithFormat:@"\n+ (NSDictionary *)%@{\n return @{%@};\n}\n",impString,result];
+=======
+ NSString *methodStr = [NSString stringWithFormat:@"\n+ (NSDictionary *)objectClassInArray{\n return @{%@};\n}\n",result];
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ return methodStr;
+ }
+}
+
+
+/**
+ * 拼装模板信息
+ *
+ * @param classInfo 类信息
+ * @param type .h或者.m或者.swift
+ *
+ * @return
+ */
++ (NSString *)dealHeaderStrWithClassInfo:(ESClassInfo *)classInfo type:(NSString *)type{
+ //模板文字
+ NSString *templateFile = [ESJsonFormatPluginPath stringByAppendingPathComponent:@"Contents/Resources/DataModelsTemplate.txt"];
+ NSString *templateString = [NSString stringWithContentsOfFile:templateFile encoding:NSUTF8StringEncoding error:nil];
+ //替换模型名字
+ templateString = [templateString stringByReplacingOccurrencesOfString:@"__MODELNAME__" withString:[NSString stringWithFormat:@"%@.%@",classInfo.className,type]];
+ //替换用户名
+ templateString = [templateString stringByReplacingOccurrencesOfString:@"__NAME__" withString:NSFullUserName()];
+ //产品名
+ NSString *productName = [ESPbxprojInfo shareInstance].productName;
+ if (productName.length) {
+ templateString = [templateString stringByReplacingOccurrencesOfString:@"__PRODUCTNAME__" withString:productName];
+ }
+ //组织名
+ NSString *organizationName = [ESPbxprojInfo shareInstance].organizationName;
+ if (organizationName.length) {
+ templateString = [templateString stringByReplacingOccurrencesOfString:@"__ORGANIZATIONNAME__" withString:organizationName];
+ }
+ //时间
+ templateString = [templateString stringByReplacingOccurrencesOfString:@"__DATE__" withString:[self dateStr]];
+
+ if ([type isEqualToString:@"h"] || [type isEqualToString:@"switf"]) {
+ NSMutableString *string = [NSMutableString stringWithString:templateString];
+ if ([type isEqualToString:@"h"]) {
+ [string appendString:@"#import \n\n"];
+ }else{
+ [string appendString:@"import UIKit\n\n"];
+ }
+ templateString = [string copy];
+ }
+ return [templateString copy];
+}
+
+/**
+ * 返回模板信息里面日期字符串
+ *
+ * @return
+ */
++ (NSString *)dateStr{
+ NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+ formatter.dateFormat = @"yy/MM/dd";
+ return [formatter stringFromDate:[NSDate date]];
+}
+
+
++ (void)createFileWithFolderPath:(NSString *)folderPath classInfo:(ESClassInfo *)classInfo{
+ if (![ESJsonFormat instance].isSwift) {
+ //创建.h文件
+ [self createFileWithFileName:[folderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.h",classInfo.className]] content:classInfo.classContentForH];
+ //创建.m文件
+ [self createFileWithFileName:[folderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.m",classInfo.className]] content:classInfo.classContentForM];
+ }else{
+ //创建.swift文件
+ [self createFileWithFileName:[folderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.swift",classInfo.className]] content:classInfo.classContentForH];
+ }
+}
+
+/**
+ * 创建文件
+ *
+ * @param FileName 文件名字
+ * @param content 文件内容
+ */
++ (void)createFileWithFileName:(NSString *)FileName content:(NSString *)content{
+ NSFileManager *manager = [NSFileManager defaultManager];
+ [manager createFileAtPath:FileName contents:[content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
+}
+
+@end
diff --git a/ESJsonFormat/Info.plist b/ESJsonFormat/Info.plist
index 792e11d..cec5c1e 100644
--- a/ESJsonFormat/Info.plist
+++ b/ESJsonFormat/Info.plist
@@ -38,6 +38,8 @@
7265231C-39B4-402C-89E1-16167C4CC990
ACA8656B-FEA8-4B6D-8E4A-93F4C95C362C
DFFB3951-EB0A-4C09-9DAC-5F2D28CC839C
+ DA4FDFD8-C509-4D8B-8B55-84A7B66AE701
+ E0A62D1F-3C18-4D74-BFE5-A4167D643966
CA351AD8-3176-41CB-875C-42A05C7CDEC7
LSMinimumSystemVersion
diff --git a/ESJsonFormat/Info.plist.orig b/ESJsonFormat/Info.plist.orig
new file mode 100644
index 0000000..ca1cb3f
--- /dev/null
+++ b/ESJsonFormat/Info.plist.orig
@@ -0,0 +1,60 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ com.enjoy.$(PRODUCT_NAME:rfc1034identifier)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+ DVTPlugInCompatibilityUUIDs
+
+ AABB7188-E14E-4433-AD3B-5CD791EAD9A3
+<<<<<<< HEAD
+=======
+ 1637F4D5-0B27-416B-A78D-498965D64877
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ F41BD31E-2683-44B8-AE7F-5F09E919790E
+ 992275C1-432A-4CF7-B659-D84ED6D42D3F
+ 7FDF5C7A-131F-4ABB-9EDC-8C5F8F0B8A90
+ C4A681B0-4A26-480E-93EC-1218098B9AA0
+ AD68E85B-441B-4301-B564-A45E4919A6AD
+ A16FF353-8441-459E-A50C-B071F53F51B7
+ 9F75337B-21B4-4ADC-B558-F9CADF7073A7
+ E969541F-E6F9-4D25-8158-72DC3545A6C6
+ 0420B86A-AA43-4792-9ED0-6FE0F2B16A13
+ 7265231C-39B4-402C-89E1-16167C4CC990
+ ACA8656B-FEA8-4B6D-8E4A-93F4C95C362C
+<<<<<<< HEAD
+ DA4FDFD8-C509-4D8B-8B55-84A7B66AE701
+ E0A62D1F-3C18-4D74-BFE5-A4167D643966
+=======
+ DFFB3951-EB0A-4C09-9DAC-5F2D28CC839C
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ CA351AD8-3176-41CB-875C-42A05C7CDEC7
+
+ LSMinimumSystemVersion
+ $(MACOSX_DEPLOYMENT_TARGET)
+ NSPrincipalClass
+ ESJsonFormat
+ XC4Compatible
+
+ XCPluginHasUI
+
+
+
diff --git a/ESJsonFormat/Setting/ESJsonFormatSetting.h b/ESJsonFormat/Setting/ESJsonFormatSetting.h
index b1ef6f0..2443057 100644
--- a/ESJsonFormat/Setting/ESJsonFormatSetting.h
+++ b/ESJsonFormat/Setting/ESJsonFormatSetting.h
@@ -7,13 +7,20 @@
//
#import
-
+typedef NS_ENUM(NSUInteger , ImpOjbClassInArrayType) {
+ ImpOjbClassInArrayType_None,
+ ImpOjbClassInArrayType_YYModel,
+ ImpOjbClassInArrayType_MJExtension
+
+};
@interface ESJsonFormatSetting : NSObject
+ (ESJsonFormatSetting *)defaultSetting;
@property BOOL useGeneric;
-@property BOOL impOjbClassInArray;
+//@property BOOL impOjbClassInArray;
+@property ImpOjbClassInArrayType impOjbClassInArray;
+//@property BOOL impModelContainerPropertyGenericClass;
@property BOOL outputToFiles;
@property BOOL uppercaseKeyWordForId;
diff --git a/ESJsonFormat/Setting/ESJsonFormatSetting.h.orig b/ESJsonFormat/Setting/ESJsonFormatSetting.h.orig
new file mode 100644
index 0000000..964fb27
--- /dev/null
+++ b/ESJsonFormat/Setting/ESJsonFormatSetting.h.orig
@@ -0,0 +1,35 @@
+//
+// ESJsonFormatSetting.h
+// ESJsonFormat
+//
+// Created by 尹桥印 on 15/7/19.
+// Copyright (c) 2015年 EnjoySR. All rights reserved.
+//
+
+#import
+<<<<<<< HEAD
+typedef NS_ENUM(NSUInteger , ImpOjbClassInArrayType) {
+ ImpOjbClassInArrayType_None,
+ ImpOjbClassInArrayType_YYModel,
+ ImpOjbClassInArrayType_MJExtension
+
+};
+=======
+
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+@interface ESJsonFormatSetting : NSObject
+
++ (ESJsonFormatSetting *)defaultSetting;
+
+@property BOOL useGeneric;
+<<<<<<< HEAD
+//@property BOOL impOjbClassInArray;
+@property ImpOjbClassInArrayType impOjbClassInArray;
+//@property BOOL impModelContainerPropertyGenericClass;
+=======
+@property BOOL impOjbClassInArray;
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+@property BOOL outputToFiles;
+@property BOOL uppercaseKeyWordForId;
+
+@end
diff --git a/ESJsonFormat/Setting/ESJsonFormatSetting.m b/ESJsonFormat/Setting/ESJsonFormatSetting.m
index 5db43a2..181f98b 100644
--- a/ESJsonFormat/Setting/ESJsonFormatSetting.m
+++ b/ESJsonFormat/Setting/ESJsonFormatSetting.m
@@ -9,8 +9,10 @@
#import "ESJsonFormatSetting.h"
+
NSString *const kESJsonFormatGeneric = @"com.EnjoySR.ESJsonFormat.Generic";
NSString *const kESJsonFormatOutputToFiles = @"com.EnjoySR.ESJsonFormat.OutputToFiles";
+//NSString *const kESJsonFormatImpModelContainerPropertyGenericClass = @"com.EnjoySR.ESJsonFormat.ImpModelContainerPropertyGenericClass";
NSString *const kESJsonFormatImpObjClassInArray = @"com.EnjoySR.ESJsonFormat.ImpObjClassInArray";
NSString *const kESJsonFormatUppercaseKeyWordForId = @"com.EnjoySR.ESJsonFormat.UppercaseKeyWordForId";
@@ -24,7 +26,7 @@ + (ESJsonFormatSetting *)defaultSetting
defaultSetting = [[ESJsonFormatSetting alloc] init];
NSDictionary *defaults = @{kESJsonFormatGeneric: @YES,
kESJsonFormatOutputToFiles: @NO,
- kESJsonFormatImpObjClassInArray: @YES,
+ kESJsonFormatImpObjClassInArray:[NSNumber numberWithUnsignedInt:ImpOjbClassInArrayType_MJExtension],//@YES,
kESJsonFormatUppercaseKeyWordForId: @NO};
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
});
@@ -40,13 +42,31 @@ - (BOOL)useGeneric{
return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatGeneric];
}
-- (void)setImpOjbClassInArray:(BOOL)impOjbClassInArray{
- [[NSUserDefaults standardUserDefaults] setBool:impOjbClassInArray forKey:kESJsonFormatImpObjClassInArray];
+//- (void)setImpModelContainerPropertyGenericClass:(BOOL)impModelContainerPropertyGenericClass{
+// [[NSUserDefaults standardUserDefaults] setBool:impModelContainerPropertyGenericClass forKey:kESJsonFormatImpModelContainerPropertyGenericClass];
+// [[NSUserDefaults standardUserDefaults] synchronize];
+//}
+//
+//- (BOOL)impModelContainerPropertyGenericClass{
+// return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatImpModelContainerPropertyGenericClass];
+//}
+
+//- (void)setImpOjbClassInArray:(BOOL)impOjbClassInArray{
+// [[NSUserDefaults standardUserDefaults] setBool:impOjbClassInArray forKey:kESJsonFormatImpObjClassInArray];
+// [[NSUserDefaults standardUserDefaults] synchronize];
+//}
+//
+//- (BOOL)impOjbClassInArray{
+// return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatImpObjClassInArray];
+//}
+
+- (void)setImpOjbClassInArray:(ImpOjbClassInArrayType)impOjbClassInArray{
+ [[NSUserDefaults standardUserDefaults] setInteger:impOjbClassInArray forKey:kESJsonFormatImpObjClassInArray];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-- (BOOL)impOjbClassInArray{
- return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatImpObjClassInArray];
+- (ImpOjbClassInArrayType)impOjbClassInArray{
+ return [[NSUserDefaults standardUserDefaults] integerForKey:kESJsonFormatImpObjClassInArray];
}
- (void)setOutputToFiles:(BOOL)outputToFiles{
diff --git a/ESJsonFormat/Setting/ESJsonFormatSetting.m.orig b/ESJsonFormat/Setting/ESJsonFormatSetting.m.orig
new file mode 100644
index 0000000..1be0c0b
--- /dev/null
+++ b/ESJsonFormat/Setting/ESJsonFormatSetting.m.orig
@@ -0,0 +1,109 @@
+//
+// ESJsonFormatSetting.m
+// ESJsonFormat
+//
+// Created by 尹桥印 on 15/7/19.
+// Copyright (c) 2015年 EnjoySR. All rights reserved.
+//
+
+#import "ESJsonFormatSetting.h"
+
+
+<<<<<<< HEAD
+
+NSString *const kESJsonFormatGeneric = @"com.EnjoySR.ESJsonFormat.Generic";
+NSString *const kESJsonFormatOutputToFiles = @"com.EnjoySR.ESJsonFormat.OutputToFiles";
+//NSString *const kESJsonFormatImpModelContainerPropertyGenericClass = @"com.EnjoySR.ESJsonFormat.ImpModelContainerPropertyGenericClass";
+=======
+NSString *const kESJsonFormatGeneric = @"com.EnjoySR.ESJsonFormat.Generic";
+NSString *const kESJsonFormatOutputToFiles = @"com.EnjoySR.ESJsonFormat.OutputToFiles";
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+NSString *const kESJsonFormatImpObjClassInArray = @"com.EnjoySR.ESJsonFormat.ImpObjClassInArray";
+NSString *const kESJsonFormatUppercaseKeyWordForId = @"com.EnjoySR.ESJsonFormat.UppercaseKeyWordForId";
+
+@implementation ESJsonFormatSetting
+
++ (ESJsonFormatSetting *)defaultSetting
+{
+ static dispatch_once_t once;
+ static ESJsonFormatSetting *defaultSetting;
+ dispatch_once(&once, ^ {
+ defaultSetting = [[ESJsonFormatSetting alloc] init];
+ NSDictionary *defaults = @{kESJsonFormatGeneric: @YES,
+ kESJsonFormatOutputToFiles: @NO,
+<<<<<<< HEAD
+ kESJsonFormatImpObjClassInArray:[NSNumber numberWithUnsignedInt:ImpOjbClassInArrayType_MJExtension],//@YES,
+=======
+ kESJsonFormatImpObjClassInArray: @YES,
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+ kESJsonFormatUppercaseKeyWordForId: @NO};
+ [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
+ });
+ return defaultSetting;
+}
+
+- (void)setUseGeneric:(BOOL)useGeneric{
+ [[NSUserDefaults standardUserDefaults] setBool:useGeneric forKey:kESJsonFormatGeneric];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+- (BOOL)useGeneric{
+ return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatGeneric];
+}
+
+<<<<<<< HEAD
+//- (void)setImpModelContainerPropertyGenericClass:(BOOL)impModelContainerPropertyGenericClass{
+// [[NSUserDefaults standardUserDefaults] setBool:impModelContainerPropertyGenericClass forKey:kESJsonFormatImpModelContainerPropertyGenericClass];
+// [[NSUserDefaults standardUserDefaults] synchronize];
+//}
+//
+//- (BOOL)impModelContainerPropertyGenericClass{
+// return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatImpModelContainerPropertyGenericClass];
+//}
+
+//- (void)setImpOjbClassInArray:(BOOL)impOjbClassInArray{
+// [[NSUserDefaults standardUserDefaults] setBool:impOjbClassInArray forKey:kESJsonFormatImpObjClassInArray];
+// [[NSUserDefaults standardUserDefaults] synchronize];
+//}
+//
+//- (BOOL)impOjbClassInArray{
+// return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatImpObjClassInArray];
+//}
+
+- (void)setImpOjbClassInArray:(ImpOjbClassInArrayType)impOjbClassInArray{
+ [[NSUserDefaults standardUserDefaults] setInteger:impOjbClassInArray forKey:kESJsonFormatImpObjClassInArray];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+- (ImpOjbClassInArrayType)impOjbClassInArray{
+ return [[NSUserDefaults standardUserDefaults] integerForKey:kESJsonFormatImpObjClassInArray];
+=======
+- (void)setImpOjbClassInArray:(BOOL)impOjbClassInArray{
+ [[NSUserDefaults standardUserDefaults] setBool:impOjbClassInArray forKey:kESJsonFormatImpObjClassInArray];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+- (BOOL)impOjbClassInArray{
+ return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatImpObjClassInArray];
+>>>>>>> 761e20d0334233346748565e58affb4ab5b04c23
+}
+
+- (void)setOutputToFiles:(BOOL)outputToFiles{
+ [[NSUserDefaults standardUserDefaults] setBool:outputToFiles forKey:kESJsonFormatOutputToFiles];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+- (BOOL)outputToFiles{
+ return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatOutputToFiles];
+}
+
+- (void)setUppercaseKeyWordForId:(BOOL)uppercaseKeyWordForId{
+ [[NSUserDefaults standardUserDefaults] setBool:uppercaseKeyWordForId forKey:kESJsonFormatUppercaseKeyWordForId];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+- (BOOL)uppercaseKeyWordForId{
+ return [[NSUserDefaults standardUserDefaults] boolForKey:kESJsonFormatUppercaseKeyWordForId];
+}
+
+@end
diff --git a/README.md b/README.md
index fad38f6..1b2fd35 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,12 @@
+## 不再使用OC了,如果对swift 感兴趣可以看看自己开源的Xcode插件 https://github.com/tanpengsccd/TPJSONFormatter
+## 新增功能-------------------------------------------------------
+
+### Xcode9-beta 以前的应该都支持(但需要先自签名 Xcode)
+
+### 添加 YYModel 支持,不影响 MJExtension 支持
+
+## 以下为EnjoySR 原作的介绍----------------------------------------
+
### ESJsonFormat-Xcode
将JSON格式化输出为模型的属性 个人活动范围>[Weibo-EnjoySR](http://weibo.com/EnjoySR)