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);
+}
+
TKCellCodeInstance* TKJSCellCode::createCellCodeInstance(TKCell *owner, const void *data)
{
- TKCellCodeInstance *result = NULL;
+ TKCellCodeInstance *result = NULL;
if (mJsConstructorRef)
{
JSContextRef jsCtx = mJSContainer->getJSContext();
std::string funcs = "";
std::string vars = "";
std::string fff = "";
+ std::string jname = getJSEscapeString(name.c_str());
const char* str_comment1 = "//";
const char* str_comment2 = "/*";
{
//FUNCTION DEF
std::string fn = "";
- funcs.append(name);
+ funcs.append(jname);
funcs.append(".prototype.");
funcs.append(fff);
funcs.append(" = function");
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");
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)