summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules/js/htdocs/util.js
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-12-11 08:59:40 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2010-12-11 08:59:40 +0000
commit7661a3bec8209546aa8219aa361cdcfd3391c246 (patch)
treeee7aff68d00cfbc089b2622613ef592630bf1bd8 /sca-cpp/trunk/modules/js/htdocs/util.js
parent7c6f4f6ff1c8653ff6110490ea5f5d5de941175d (diff)
Port XML, ATOM and SCDL parsing logic to Javascript. Implement minimal component rendering functions.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1044594 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp/trunk/modules/js/htdocs/util.js')
-rw-r--r--sca-cpp/trunk/modules/js/htdocs/util.js153
1 files changed, 126 insertions, 27 deletions
diff --git a/sca-cpp/trunk/modules/js/htdocs/util.js b/sca-cpp/trunk/modules/js/htdocs/util.js
index 96a84af6d6..da069d7ae6 100644
--- a/sca-cpp/trunk/modules/js/htdocs/util.js
+++ b/sca-cpp/trunk/modules/js/htdocs/util.js
@@ -18,11 +18,11 @@
*/
/**
- * Utility functions.
+ * Simple utility functions.
*/
/**
- * Simple scheme-like lists.
+ * Scheme-like lists.
*/
function cons(car, cdr) {
return new Array(car).concat(cdr);
@@ -32,10 +32,76 @@ function car(l) {
return l[0];
}
+function first(l) {
+ return car(l);
+}
+
function cdr(l) {
return l.slice(1);
}
+function rest(l) {
+ return cdr(l);
+}
+
+function cadr(l) {
+ return car(cdr(l));
+}
+
+function cddr(l) {
+ return cdr(cdr(l));
+}
+
+function caddr(l) {
+ return car(cddr(l));
+}
+
+function append(a, b) {
+ return a.concat(b);
+}
+
+function reverse(l) {
+ return l.slice(0).reverse();
+}
+
+function isNil(v) {
+ if (v == null)
+ return true;
+ if ('' + v == 'undefined')
+ return true;
+ try {
+ if (isList(v) && v.length == 0)
+ return true;
+ } catch (e) {}
+ return false;
+}
+
+function isSymbol(v) {
+ if (typeof v == 'string' && v.slice(0, 1) == "'")
+ return true;
+ return false;
+}
+
+function isString(v) {
+ if (typeof v == 'string')
+ return true;
+ return false;
+}
+
+function isList(v) {
+ try {
+ if (v.constructor == Array)
+ return true;
+ } catch (e) {}
+ return false;
+}
+
+function isTaggedList(v, t) {
+ if (isList(v) && !isNil(v) && car(v) == t)
+ return true;
+ return false;
+}
+
function mklist() {
var a = new Array();
for (i = 0; i < arguments.length; i++)
@@ -43,39 +109,38 @@ function mklist() {
return a;
}
-function isList(v) {
- return toString.call(v) === '[object Array]';
-}
-
-function isNil(v) {
- return v == 'undefined' || v == null;
+/**
+ * Scheme-like associations.
+ */
+function assoc(k, l) {
+ if (isNil(l))
+ return mklist();
+ if (k == car(car(l)))
+ return car(l);
+ return assoc(k, cdr(l));
}
-function isEmpty(l) {
- return l.length == 0;
+/**
+ * Map and filter functions.
+ */
+function map(f, l) {
+ if (isNil(l))
+ return l;
+ return cons(f(car(l)), map(f, cdr(l)));
}
-/**
- * convert an array or object to a non-sparse array.
- */
-function array(obj) {
- if (isNil(obj.length)) {
- var a = new Array();
- a[0] = obj;
- return a;
- } else {
- var a = new Array();
- var n = 0;
- for (var i in obj)
- a[n++] = obj[i];
- return a;
- }
+function filter(f, l) {
+ if (isNil(l))
+ return l;
+ if (f(car(l)))
+ return cons(car(l), filter(f, cdr(l)));
+ return filter(f, cdr(l));
}
/**
- * Dump an object to the console.
+ * Dump an object to the debug console.
*/
-function dump(o) {
+function debug(o) {
for (f in o) {
try {
console.log(f + '=' + o[f]);
@@ -83,3 +148,37 @@ function dump(o) {
}
}
+/**
+ * Write a list of strings.
+ */
+function writeStrings(l) {
+ if (isNil(l))
+ return '';
+ return car(l) + writeStrings(cdr(l));
+}
+
+/**
+ * Write a value using a Scheme-like syntax.
+ */
+function writeValue(v) {
+ function writePrimitive(p) {
+ if (isSymbol(p))
+ return '' + p.substring(1);
+ if (isString(p))
+ return '"' + p + '"';
+ return '' + p;
+ }
+
+ function writeList(l) {
+ if (isNil(l))
+ return '';
+ return ' ' + writeValue(car(l)) + writeList(cdr(l));
+ }
+
+ if (!isList(v))
+ return writePrimitive(v);
+ if (isNil(v))
+ return '()';
+ return '(' + writeValue(car(v)) + writeList(cdr(v)) + ')';
+}
+