OSDN Git Service

fixed a cell code name naming issue.
authortkawata <takuji.kawata@gmail.com>
Sun, 22 Jan 2012 15:44:36 +0000 (00:44 +0900)
committertkawata <takuji.kawata@gmail.com>
Sun, 22 Jan 2012 15:44:36 +0000 (00:44 +0900)
Source/DNUtils.cpp
Source/DNUtils.h
Source/TKJSCellCode.cpp

index 9e30041..6a9cc3d 100644 (file)
@@ -217,3 +217,66 @@ std::string getFQNString(const char *location, const char *name)
     
     return fqn;
 }
+
+std::string getJSEscapeString(const char *cstring)
+{
+    const char *c = cstring; 
+    int len = 0;
+    while(*c)
+    {
+        if (*c == '/') len++;
+        else if (*c == '_') len++;
+        else if (*c == '.') len++;
+        else if (*c == '#') len++;
+                 
+        c++;
+        len++;
+    }
+    char *buf = (char*)malloc(len);
+    char *result = buf;
+    
+    c = cstring; 
+    while(*c)
+    {
+        if (*c == '/')
+        {
+            *buf = '_';
+            buf++;
+            *buf = 's';
+            buf++;
+        }
+        else if (*c == '_')
+        {
+            *buf = '_';
+            buf++;
+            *buf = '_';
+            buf++;            
+        }
+        else if (*c == '.')
+        {
+            *buf = '_';
+            buf++;
+            *buf = 'd';
+            buf++;
+        }
+        else if (*c == '#')
+        {
+            *buf = '_';
+            buf++;
+            *buf = 'S';
+            buf++;
+        }
+        else
+        {
+            *buf = *c;
+            buf++;
+        }
+        
+        c++;
+        len++;
+    }
+    *buf = 0;
+    
+    return std::string(result);
+}
+
index cd4361a..f0d2181 100644 (file)
@@ -25,5 +25,5 @@
 void trimString(std::string& str);
 
 std::string getFQNString(const char *location, const char *name);
-
+std::string getJSEscapeString(const char *cstring);
 #endif
index aa0bfcc..7b3c1b1 100644 (file)
@@ -29,7 +29,7 @@
 
 TKCellCodeInstance* TKJSCellCode::createCellCodeInstance(TKCell *owner, const void *data)
 {
-     TKCellCodeInstance *result = NULL;
+    TKCellCodeInstance *result = NULL;
     if (mJsConstructorRef)
     {
         JSContextRef jsCtx = mJSContainer->getJSContext();
@@ -80,6 +80,7 @@ TKJSCellCode::TKJSCellCode(std::string name, std::string cellapi, TKJSContainer
     std::string funcs = "";
     std::string vars = "";
     std::string fff = "";
+    std::string jname = getJSEscapeString(name.c_str());
     
     const char* str_comment1 = "//";
     const char* str_comment2 = "/*";
@@ -228,7 +229,7 @@ TKJSCellCode::TKJSCellCode(std::string name, std::string cellapi, TKJSContainer
                 {
                     //FUNCTION DEF
                     std::string fn = "";
-                    funcs.append(name);
+                    funcs.append(jname);
                     funcs.append(".prototype.");
                     funcs.append(fff);
                     funcs.append(" = function");
@@ -323,7 +324,7 @@ TKJSCellCode::TKJSCellCode(std::string name, std::string cellapi, TKJSContainer
     
     std::string stmt = "";
     stmt.append("function ");
-    stmt.append(name);
+    stmt.append(jname);
     stmt.append("(ownerCell)\n{\nthis.cell = ownerCell;\n");
     stmt.append(vars);
     stmt.append("\n}\n");
@@ -336,7 +337,7 @@ TKJSCellCode::TKJSCellCode(std::string name, std::string cellapi, TKJSContainer
     JSObjectRef  jsGlobalObj = mJSContainer->getJSGlobalObject();
     JSStringRef jstrScript = JSStringCreateWithUTF8CString(stmt.c_str());
     JSEvaluateScript(jsCtx, jstrScript, NULL, NULL, 1, NULL);
-    JSStringRef jstrClassName = JSStringCreateWithUTF8CString(name.c_str());
+    JSStringRef jstrClassName = JSStringCreateWithUTF8CString(jname.c_str());
     mJsConstructorRef = (JSObjectRef) JSObjectGetProperty(jsCtx, jsGlobalObj, jstrClassName,NULL);
     JSStringRelease(jstrClassName);
     if (!mJsConstructorRef)