Add tasks for all the new languages

This commit is contained in:
Tina Müller 2016-12-05 23:44:36 +01:00
parent 9dc3c2bb62
commit bba7bfd280
13208 changed files with 134745 additions and 0 deletions

View file

@ -0,0 +1,45 @@
//--------------------------------------
// Simple (unsafe) JSON decoder based on eval()
// @param {string} json
// @return {any}
//--------------------------------------
function json_decode (json){
var o;
eval('o='+json);
return _json_decode_val(o);
}
function _json_decode_val (o){
if (o==null) return undefined;
switch(typeof(o)){
case "object":
if (o instanceof Array){
var v = list();
var cnt = o.length;
for (i=0;i<cnt;i++){
v.add(_json_decode_val(o[i]));
}
}else{
var v = propList();
for (var i in o){
var p = i;
v.setAProp(_json_decode_val(p), _json_decode_val(o[i]));
}
}
return v;
case "string":
// optional support of special Lingo data type 'symbol' unknown to JavaScript
if (o.substr(0,7)=='__sym__') return symbol(o.substr(7));
return o;
default:
return o;
}
}
function _json_escape_string (str){
var hash={"\\":"\\\\", "/":"\\/", "\n":"\\n", "\t":"\\t", "\r":"\\r", "\b":"\\b", "\f":"\\f", "\"":"\\\""};
var patt = "["; for (i in hash) patt+=i;patt+="]";
return str.replace(RegExp(patt, "g"), function(c){
return hash[c]
});
}

View file

@ -0,0 +1,50 @@
----------------------------------------
-- JSON encoder
-- Supported Lingo data types: VOID, integer, float, string, symbol, list, propList
-- @param {any} o
-- @return {string}
----------------------------------------
on json_encode (o)
case ilk(o) of
#void:
return "null"
#integer, #float:
return string(o)
#string:
return QUOTE & _json_escape_string(o) & QUOTE
#list:
res = []
repeat with v in o
res.add(json_encode(v))
end repeat
return "[" & _cimplode(res) & "]"
#propList:
res = []
cnt = count(o)
repeat with i = 1 to cnt
p = o.getPropAt(i)
v = o[i]
res.add( json_encode(p)&":"&json_encode(v) )
end repeat
return "{" & _cimplode(res) & "}"
#symbol:
-- optional support of special Lingo data type 'symbol' unknown to JavaScript
return QUOTE &"__sym__"&_json_escape_string(string(o)) & QUOTE
otherwise:
put "ERROR: unsupported data type"
end case
end
----------------------------------------
-- Implodes list into comma-separated string
-- @param {list} l
-- @return {string}
----------------------------------------
on _cimplode (l)
str=""
repeat with i=1 to l.count
put l[i]&"," after str
end repeat
delete the last char of str
return str
end

View file

@ -0,0 +1,16 @@
data_org = [\
42,\
3.14159,\
[2, 4, #fooBar, "apples", "bananas", "cherries" ],\
["foo": 1, #bar: VOID, "Hello": "world!"],\
VOID\
]
json_str = json_encode(data_org) -- valid according to JSONLint
data_decoded = json_decode(json_str)
put data_org
-- [42, 3.1416, [2, 4, #fooBar, "apples", "bananas", "cherries"], ["foo": 1, #bar: <Void>, "Hello": "world!"], <Void>]
put data_decoded
-- [42, 3.1416, [2, 4, #fooBar, "apples", "bananas", "cherries"], ["foo": 1, #bar: <Void>, "Hello": "world!"], <Void>]