OSDN Git Service

Added Global.jsh
authorNagao Takeyuki <nagaotakeyuki@gmail.com>
Sat, 12 Sep 2009 13:25:51 +0000 (22:25 +0900)
committerNagao Takeyuki <nagaotakeyuki@gmail.com>
Sat, 12 Sep 2009 13:25:51 +0000 (22:25 +0900)
Signed-off-by: Nagao Takeyuki <nagaotakeyuki@gmail.com>
Makefile
configure
src/js/bundle/jdisp.jsh
src/js/include/jdisp/Global.jsh [new file with mode: 0644]
src/js/include/jdisp/package.jsh

index 840fdac..e42c45c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,13 +4,15 @@ include ./var/config.mk
 all:
        @for bundle in $$(find ./src/js/bundle -name '*.jsh') ; do \
                echo "Building bundle $$bundle" ;\
-               file=$$(basename $$bundle) ; \
+               file=$$(basename "$$bundle") ; \
                js=$${file%.jsh}.js ; \
                output=build/js/$$js; \
                $(PROG_INSTALL) -d build/js && \
-         $(PROG_CPP) -I./src/js/include -P -nostdinc -x c -o - $$bundle \
-                 | sed -n '/./p' > $$output && \
-               echo "Wrote output on $$output" \
+         $(PROG_CPP) -I./src/js/include -P -nostdinc -x c -o - "$$bundle" \
+                 | sed -n '/./p' > "$$output" && \
+               echo "Wrote output on $$output" && \
+               $(PROG_JSL) -process "$$output" && \
+               echo "Test successful." \
                || exit 1 ; \
        done
 
index 3acb192..b602680 100755 (executable)
--- a/configure
+++ b/configure
@@ -7,6 +7,7 @@ if [ ! -f "$CONFIG_FILE" ] ; then
   cat > "$CONFIG_FILE" <<EOS
 PROG_CPP=gcc -E
 PROG_INSTALL=install
+PROG_JSL=jsl
 EOS
 else
   echo >&2 "warning: config file $CONFIG_FILE already exists.  Not overwriting."
index 121723b..3901c1f 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef _JDISP_H
 #define _JDISP_H
 
-#include <jdisp/package.jsh>
 #include <jdisp/lang/package.jsh>
+#include <jdisp/package.jsh>
 
 #endif /* _JDISP_H */
diff --git a/src/js/include/jdisp/Global.jsh b/src/js/include/jdisp/Global.jsh
new file mode 100644 (file)
index 0000000..306f18d
--- /dev/null
@@ -0,0 +1,187 @@
+#ifndef _JDISP_GLOBAL_JSH\r
+#define _JDISP_GLOBAL_JSH\r
+\r
+OOP_CLASS(Global) = function() {};\r
+\r
+OOP_METHOD(Global, eval) = function (txt)\r
+{\r
+  EVAL_RAW(txt);\r
+};\r
+\r
+OOP_METHOD(Global, random) = function (bound)\r
+{\r
+  if (+bound === bound) {\r
+    return Math.floor(Math.random() * bound);\r
+  } else {\r
+    return Math.random();\r
+  }\r
+};\r
+\r
+OOP_METHOD(Global, gettimeofday) = function ()\r
+{\r
+  return (new Date()).getTime();\r
+};\r
+\r
+OOP_METHOD(Global, time) = function ()\r
+{\r
+  var t1000 = this.gettimeofday();\r
+  return Math.floor(t1000 / 1000);\r
+};\r
+\r
+OOP_METHOD(Global, escapeHtml) = function (str)\r
+{\r
+  var d = document.createElement('div');\r
+  var text = document.createTextNode(str);\r
+  d.appendChild(text);\r
+  var ret = d.innerHTML;\r
+  d = null;\r
+  text = null;\r
+  return ret;\r
+};\r
+\r
+OOP_METHOD(Global, zeroPrefix) = function (value, digits)\r
+{\r
+  if (+value === value) {\r
+    var s = '';\r
+    for (var i=0; i<digits; i++) s += '0';\r
+    s += String(Number(value));\r
+    return s.slice(s.length - digits);\r
+  } else {\r
+    return Number(value);\r
+  }\r
+};\r
+\r
+OOP_METHOD(Global, encodeURIComponent) = function(str)\r
+{\r
+  return window.encodeURIComponent.apply(this, arguments);\r
+};\r
+\r
+OOP_METHOD(Global, decodeURIComponent) = function(str)\r
+{\r
+  var s = window.decodeURIComponent.apply(this, arguments);\r
+  s = s.replace(/\+/g, ' ');\r
+  return s;\r
+};\r
+\r
+OOP_METHOD(Global, arrayLength) = function (a)\r
+{\r
+  var count = 0;\r
+  for (var i in a) {\r
+    count++;\r
+  }\r
+  return count;\r
+};\r
+\r
+OOP_METHOD(Global, assignValues) = function (dst, src, fields)\r
+{\r
+  if (IS_OBJECT(fields)) {\r
+    for (var i in fields) {\r
+      var k = fields[i];\r
+      if (IS_DEFINED(typeof src[k])) {\r
+        dst[k] = src[k];\r
+      }\r
+    }\r
+  } else {\r
+    for (var j in src) {\r
+      dst[j] = src[j];\r
+    }\r
+  }\r
+};\r
+\r
+OOP_METHOD(Global, quoteString) = function (str, q)\r
+{\r
+  if (str === null) return null;\r
+  var s = String(str);\r
+  s = s.replace(/\\/g,"\\\\");\r
+  switch (q) {\r
+  case "'":\r
+    s = s.replace(/'/g,"\\'");\r
+    break;\r
+  case '"':\r
+    s = s.replace(/"/g,'\\"');\r
+    break;\r
+  default:\r
+    break;\r
+  }\r
+  s = s.replace(/\n/g,"\\n");\r
+  s = s.replace(/\t/g,"\\t");\r
+  s = s.replace(/\f/g,"\\f");\r
+// FIXME: make the following line work\r
+//    s = s.replace(/\b/g,"\\b");\r
+  return q + s + q;\r
+};\r
+\r
+OOP_METHOD(Global, dumpVar) = function (obj, wantFunction, maxRecursion)\r
+{\r
+  var me = this;\r
+  var maxLv = 64;\r
+  var qq = '"';\r
+  if (IS_DEFINED(maxRecursion)) maxLv = Number(maxRecursion);\r
+\r
+  var f = function (o, lv) {\r
+    if (lv > maxLv) {\r
+      return {value:'(error)', error: 'Too many levels of recursion.'};\r
+    }\r
+    var t = typeof o;\r
+    var v = new Object();\r
+    var k;\r
+    switch (t) {\r
+    case 'number' :\r
+    case 'boolean':\r
+      v.value = String(o);\r
+      break;\r
+    case 'string' :\r
+      v.value = me.quoteString(o, qq);\r
+      break;\r
+    case 'function':\r
+      v.value = "/* function " + o + " */";\r
+      v.isFunction = true;\r
+      break;\r
+    case 'undefined':\r
+      v.value = "undefined";\r
+      break;\r
+    case 'object':\r
+      // FIXME: Make it possible to dump arrays.\r
+      if (o === null) {\r
+        v.value = 'null';\r
+      } else if (IS_ARRAY(o)) {\r
+        // FIXME: handle the case where o is a pseudo hash.\r
+        var lp1 = new jdisp.text.ListPrinter('[', ',', ']');\r
+        for (k in o) {\r
+          var ret1 = f(o[k], lv + 1);\r
+          if (!ret1.isFunction || wantFunction) {\r
+            lp1.append(ret1.value);\r
+          }\r
+        }\r
+        v.value = lp1.toString();\r
+      } else {\r
+        var lp2 = new jdisp.text.ListPrinter('{', ',', '}');\r
+        for (k in o) {\r
+          var ret2 = f(o[k], lv + 1);\r
+          if (!ret2.isFunction || wantFunction) {\r
+            lp2.append(me.quoteString(k, qq) + ":" + ret2.value);\r
+          }\r
+        }\r
+        v.value = lp2.toString();\r
+      }\r
+      break;\r
+    default:\r
+      FATAL('invalid data type: ' + t);\r
+      v.value = null;\r
+      break;\r
+    }\r
+    return v;\r
+  };\r
+  var r = f(obj, 0);\r
+  return r.value;\r
+};\r
+\r
+OOP_METHOD(Global, invokeLater) = function (func, timeout)\r
+{\r
+  var t = (IS_DEFINED(timeout)) ? timeout : 0;\r
+  if (IS_FUNCTION(func)) {\r
+    setTimeout(func, t);\r
+  }\r
+};\r
+\r
+#endif /* _JDISP_GLOBAL_JSH */\r
index e69de29..0eb98d9 100644 (file)
@@ -0,0 +1,7 @@
+#ifndef _JDISP_PACKAGE_JSH
+#define _JDISP_PACKAGE_JSH
+
+#include "Global.jsh"
+
+
+#endif /* _JDISP_PACKAGE_JSH */