OSDN Git Service

add objective-c project to chartool
[sawarabi-fonts/sawarabi-fonts.git] / chartool / objective-c / JavaScriptEngine.m
1 //
2 //  JavaScriptEngine.m
3 //  chartool
4 //
5 //  Created by mshio on 11/02/06.
6 //  Copyright 2011 mshio. All rights reserved.
7 //
8
9 #import "JavaScriptEngine.h"
10
11 @implementation JavaScriptEngine
12
13 - (void) setContext: (JSGlobalContextRef) ctx {
14         context = ctx;
15 }
16
17 - (JSValueRef) evaluateScript: (NSString *) script {
18         JSStringRef scriptJS = JSStringCreateWithCFString((CFStringRef) script);
19         JSValueRef result = JSEvaluateScript(context, scriptJS, NULL, NULL, 0, NULL);
20         JSStringRelease(scriptJS);
21         
22         return result;
23 }
24
25 - (void) loadScript {
26         NSString* script;
27         NSString* path = @"./js/charpalette.js";
28         NSError* error;
29         
30         script = [NSString stringWithContentsOfFile: path encoding: NSUTF8StringEncoding error: &error];
31         if (script) {
32                 [self evaluateScript: script];
33         } else {
34                 NSLog(@"the js file is not found");
35         }
36 }
37
38 + (JavaScriptEngine *) instance {
39         static JavaScriptEngine* _instance = nil;
40         
41         if (! _instance) {
42                 _instance = [[JavaScriptEngine alloc] init];
43                 [_instance setContext: JSGlobalContextCreate(NULL)];
44                 [_instance loadScript];
45         }
46         return _instance;
47 }
48
49 - (NSString *) evaluate: (NSString *) script {
50         JSValueRef result = [self evaluateScript: script];
51         
52         CFStringRef resultString;
53         if (result) {
54                 JSStringRef resultStringJS = JSValueToStringCopy(context, result, NULL);
55                 resultString = JSStringCopyCFString(kCFAllocatorDefault, resultStringJS);
56                 JSStringRelease(resultStringJS);
57         } else {
58                 resultString = CFSTR("[Exception]");
59         }
60
61         return [(NSString *) resultString autorelease];
62 }
63
64 - (NSArray *) getFontsNameArray {
65         NSString* v = [self evaluate: @"font"];
66         NSArray* r = [v componentsSeparatedByString: @","];
67
68         return r;
69 }
70
71 - (void) release {
72         JSGlobalContextRelease(context);
73         [super release];
74 }
75
76 @end