diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2010-12-11 08:59:40 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2010-12-11 08:59:40 +0000 |
commit | 7661a3bec8209546aa8219aa361cdcfd3391c246 (patch) | |
tree | ee7aff68d00cfbc089b2622613ef592630bf1bd8 /sca-cpp/trunk/modules/js/htdocs/util.js | |
parent | 7c6f4f6ff1c8653ff6110490ea5f5d5de941175d (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 '')
-rw-r--r-- | sca-cpp/trunk/modules/js/htdocs/util.js | 153 |
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)) + ')'; +} + |