Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
45
Task/JSON/Lingo/json-1.lingo
Normal file
45
Task/JSON/Lingo/json-1.lingo
Normal 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]
|
||||
});
|
||||
}
|
||||
50
Task/JSON/Lingo/json-2.lingo
Normal file
50
Task/JSON/Lingo/json-2.lingo
Normal 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
|
||||
16
Task/JSON/Lingo/json-3.lingo
Normal file
16
Task/JSON/Lingo/json-3.lingo
Normal 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>]
|
||||
Loading…
Add table
Add a link
Reference in a new issue