#lib json.nas var JSON=func(){ var ( j_eof, j_lbrace, j_rbrace, j_lbracket, j_rbracket, j_comma, j_colon, j_str, j_num, j_id )=( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ); var j_content=[ "eof", "`{`", "`}`", "`[`", "`]`", "`,`", "`:`", "string", "number", "identifier" ]; var text=''; var line=1; var text_size=0; var ptr=0; var token={content:'',type:''}; var content={}; var init=func(){ line=1; text_size=0; ptr=0; content={}; token={content:'',type:''}; text=''; } var isnum=func(c){ return '0'<=c and c<='9'; } var isid=func(c){ var tmp=c[0]; return ('a'[0]<=tmp and tmp<='z'[0]) or ('A'[0]<=tmp and tmp<='Z'[0]) or c=='_'; } var check=func(){ var c=text[ptr]; return ( c=='{' or c=='}' or c=='[' or c==']' or c==',' or c==':' or c=='\"' or c=='\'' or isnum(c) or isid(c) ); } var get=func(str){ init(); if(!size(str)) die("empty string"); text=split('',str); text_size=size(text); return; } var next=func(){ while(ptr=text_size){ token.content="eof"; token.type=j_eof; return; } var c=text[ptr]; if(c=='{'){ token.content='{'; token.type=j_lbrace; }elsif(c=='}'){ token.content='}'; token.type=j_rbrace; }elsif(c=='['){ token.content='['; token.type=j_lbracket; }elsif(c==']'){ token.content=']'; token.type=j_rbracket; }elsif(c==','){ token.content=','; token.type=j_comma; }elsif(c==':'){ token.content=':'; token.type=j_colon; }elsif(c=='\"' or c=='\''){ var strbegin=c; var s=""; ptr+=1; while(ptr