Changeset 1963561
- Timestamp:
- 10/26/2018 12:26:40 PM (7 years ago)
- Location:
- easycoder/trunk
- Files:
-
- 7 edited
-
easycoder-template.js (modified) (1 diff)
-
easycoder.js (modified) (13 diffs)
-
easycoder.php (modified) (2 diffs)
-
plugin-browser.js (modified) (4 diffs)
-
plugin-json.js (modified) (4 diffs)
-
plugin-svg.js (modified) (4 diffs)
-
readme.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
easycoder/trunk/easycoder-template.js
r1963126 r1963561 8 8 $jscomp.polyfill("String.prototype.endsWith",function(d){return d?d:function(d,g){var e=$jscomp.checkStringArgs(this,d,"endsWith");d+="";void 0===g&&(g=e.length);g=Math.max(0,Math.min(g|0,e.length));for(var b=d.length;0<b&&0<g;)if(e[--g]!=d[--b])return!1;return 0>=b}},"es6","es3");$jscomp.polyfill("Math.trunc",function(d){return d?d:function(d){d=Number(d);if(isNaN(d)||Infinity===d||-Infinity===d||0===d)return d;var f=Math.floor(Math.abs(d));return 0>d?-f:f}},"es6","es3"); 9 9 $jscomp.polyfill("Number.isFinite",function(d){return d?d:function(d){return"number"!==typeof d?!1:!isNaN(d)&&Infinity!==d&&-Infinity!==d}},"es6","es3");$jscomp.polyfill("Number.isInteger",function(d){return d?d:function(d){return Number.isFinite(d)?d===Math.floor(d):!1}},"es6","es3"); 10 (function(){function d(f,g,e){function b(c, k){if(!g[c]){if(!f[c]){var h="function"==typeof require&&require;if(!k&&h)return h(c,!0);if(a)return a(c,!0);k=Error("Cannot find module '"+c+"'");throw k.code="MODULE_NOT_FOUND",k;}k=g[c]={exports:{}};f[c][0].call(k.exports,function(a){return b(f[c][1][a]||a)},k,k.exports,d,f,g,e)}return g[c].exports}for(var a="function"==typeof require&&require,c=0;c<e.length;c++)b(e[c]);return b}return d})()({1:[function(d,f,g){var e=d("./easycoder/Main");console.log("Starting up EasyCoder...");10 (function(){function d(f,g,e){function b(c,h){if(!g[c]){if(!f[c]){var k="function"==typeof require&&require;if(!h&&k)return k(c,!0);if(a)return a(c,!0);h=Error("Cannot find module '"+c+"'");throw h.code="MODULE_NOT_FOUND",h;}h=g[c]={exports:{}};f[c][0].call(h.exports,function(a){return b(f[c][1][a]||a)},h,h.exports,d,f,g,e)}return g[c].exports}for(var a="function"==typeof require&&require,c=0;c<e.length;c++)b(e[c]);return b}return d})()({1:[function(d,f,g){var e=d("./easycoder/Main");console.log("Starting up EasyCoder..."); 11 11 window.onload=function(){"undefined"!=typeof EasyCoder_Plugins&&EasyCoder_Plugins.add(e.domain);var b=document.getElementById("easycoder-script");if(b){b.style.display="none";try{e.start(b.innerText)}catch(a){e.reportError(a)}}}},{"./easycoder/Main":6}],2:[function(d,f,g){f.exports=function(d,b,a){b=d.value.evaluate(d,b);a=d.value.evaluate(d,a);b.numeric!==a.numeric&&d.error.runtimeError(d[d.pc].lino,"Data type mismatch");d=b.content;a=a.content;return d>a?1:d<a?-1:0}},{}],3:[function(d,f,g){var e= 12 12 Object.assign||function(a){for(var c=1;c<arguments.length;c++){var b=arguments[c],d;for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d])}return a},b=this,a={getTokens:function(){return b.tokens},addWarning:function(a){b.warnings.push(a)},warning:function(c){a.addWarning(c);throw Error();},unrecognisedSymbol:function(c){a.addWarning("Unrecognised symbol '"+c+"'")},getWarnings:function(){return b.warnings},getIndex:function(){return b.index},next:function(a){b.index+=void 0===a?1:a},peek:function(){return b.tokens[b.index+ 13 13 1].token},getToken:function(){return b.index>=b.tokens.length?null:b.tokens[b.index]?b.tokens[b.index].token:null},nextToken:function(){a.next();return a.getToken()},skip:function(c){if(b.index>=b.tokens.length)return null;a.next();a.tokenIs(c)&&a.next()},prev:function(){b.index--},getLino:function(){return b.index>=b.tokens.length?0:b.tokens[b.index].lino},tokenIs:function(a){return b.index>=b.tokens.length?!1:a===b.tokens[b.index].token},getTarget:function(a){a=void 0===a?b.index:a;return b.tokens[a].token}, 14 14 getTargetPc:function(c){c=void 0===c?b.index:c;return b.symbols[a.getTarget(c)].pc},getCommandAt:function(a){return b.program[a]},isSymbol:function(){return a.getTarget()in b.symbols},getSymbol:function(){return b.symbols[a.getToken()]},getSymbolPc:function(){return a.getSymbol().pc},getSymbolRecord:function(){return b.program[a.getSymbolPc()]},getSymbols:function(){return b.symbols},getProgram:function(){return b.program},getPc:function(){return b.program.length},getValue:function(){return a.value.compile(a)}, 15 getCondition:function(){return a.condition.compile(a)},constant:function(c){return a.value.constant(c)},addCommand:function(a){b.program.push(e({pc:b.program.length},a))},addSymbol:function(a,h){b.symbols[a]={pc:h}},mark:function(){b.savedMark=b.index},rewind:function(){b.index=b.savedMark},compileVariable:function(c,h,k,d){k=void 0===k?!1:k;d=void 0===d?null:d;a.next();var m=a.getLino(),n=a.getTokens()[a.getIndex()];b.symbols[n.token]&&a.error.duplicateSymbolError(n.token);var e=a.getPc();a.next(); 16 a.addSymbol(n.token,e);a.addCommand({domain:c,keyword:h,lino:m,isSymbol:!0,isValueHolder:k,name:n.token,elements:1,index:0,value:[{}],extra:d})},compileToken:function(){var c=a.getToken();if(c){var b=a.getIndex();a.mark();for(var k=$jscomp.makeIterator(Object.keys(a.domain)),d=k.next();!d.done;d=k.next()){if((d=a.domain[d.value])&&(d=d.getHandler(c))&&d.compile(a))return;a.rewind()}console.log("No handler found");a.error.dontUnderstandError(c,b)}},compileOne:function(){var c=a.getToken();if(c){b.warnings= 17 [];var h=b.program.length;c.endsWith(":")?(b.symbols[c.substring(0,c.length-1)]={pc:h},b.index++):a.compileToken()}},compileFromHere:function(c){for(;b.index<b.tokens.length;){var h=b.tokens[b.index].token;if("else"===h)return b.program;a.compileOne();if(-1<c.indexOf(h))break}},compile:function(c){b.tokens=c;b.index=0;b.program=[];b.symbols={};b.warnings=[];a.compileFromHere([]);a.addCommand({domain:"core",keyword:"stop",lino:a.getLino(),next:0});return b.program}};f.exports=a},{}],4:[function(d, 18 f,g){var e=Object.assign||function(b){for(var a=1;a<arguments.length;a++){var c=arguments[a],h;for(h in c)Object.prototype.hasOwnProperty.call(c,h)&&(b[h]=c[h])}return b};f.exports={compile:function(b){b.mark();for(var a=$jscomp.makeIterator(Object.keys(b.domain)),c=a.next();!c.done;c=a.next()){if(c=b.domain[c.value].condition.compile(b))return e({domain:name},c);b.rewind()}},test:function(b,a){return b.domain[a.domain].condition.test(b,a)}}},{}],5:[function(d,f,g){var e=this,b={Add:{compile:function(a){var c= 19 a.getLino();a.next();var b=a.getValue();if(a.tokenIs("to"))if(a.next(),a.getToken(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"===a.peek()){d=a.getValue();a.next();var m=a.getToken();a.next();a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,value2:d,target:m})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,target:d});return!0}a.warning("core "+e.name+"': Expected value holder")}else{d=a.getValue();if(a.tokenIs("giving"))return a.next(), 20 m=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,value2:d,target:m}),!0;a.warning("core "+e.name+'\': Expected "giving"')}return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,m=a.getSymbolRecord(c.target);if(m.isValueHolder){var e=m.value[m.index];d?(a=a.getValue(d)+a.getValue(b),m.value[m.index]={type:"constant",numeric:!0,content:a}):(e.numeric||a.error.nonNumericValueError(c.lino),a=e.content+a.getValue(b),m.value[m.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino, 21 m.name);return c.pc+1}},Alias:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();if(a.tokenIs("to")&&(a.next(),a.isSymbol())){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"alias",lino:c,alias:b,symbol:d});return!0}}return!1},run:function(a){var c=a[a.pc],b=a.symbols[c.alias].pc,d=a[b],e=a.getSymbolRecord(c.symbol);a[b]={pc:d.pc,domain:e.domain,keyword:e.keyword,lino:d.lino,name:d.name,alias:c.symbol};return c.pc+1}},Begin:{compile:function(a){a.next(); 22 a.compileFromHere(["end"]);return!0},run:function(a){return a[a.pc].pc+1}},Clear:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"clear",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.isValueHolder?(a.domain[b.domain].value.put(b,{type:"boolean",content:!1}),c.numeric=!1):a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Debug:{compile:function(a){var c= 23 a.getLino();a.next();if(a.tokenIs("program")){a.next();if(a.tokenIs("item")||a.tokenIs("pc")){a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"debug",lino:c,item:b});return!0}a.addCommand({domain:"core",keyword:"debug",lino:c,item:-1});return!0}if(a.tokenIs("symbols"))return a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbols"}),!0;if(a.tokenIs("symbol"))return a.next(),b=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbol",name:b}), 24 !0;a.error.NoSuchVariableError(a.getToken())},run:function(a){var c=a[a.pc],b=c.item;switch(b){case "symbols":console.log("Symbols: "+JSON.stringify(a.symbols,null,2));break;case "symbol":console.log("Symbol: "+JSON.stringify(a.getSymbolRecord(c.name),null,2));break;default:0<=b.content?console.log("Debug item "+b.content+": "+JSON.stringify(a[b.content],null,2)):console.log("Debug program: "+JSON.stringify(a,null,2))}return c.pc+1}},Decode:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b= 25 a.getToken();a.next();a.addCommand({domain:"core",keyword:"decode",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);if(b.isValueHolder){var d=a.getValue(b.value);b.value[b.index]={type:"constant",numeric:"false",content:a.decode(d)};c.numeric=!1}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Divide:{compile:function(a){var c=a.getLino();a.next();a.getToken();if(a.isSymbol()){var b=a.getSymbol();var d=a.getCommandAt(b.pc).name}b= 26 a.getValue();a.tokenIs("by")&&a.next();var m=a.getValue();if(a.tokenIs("giving")){a.next();if(a.isSymbol())return d=a.getSymbol(),d=a.getCommandAt(d.pc).name,a.next(),a.addCommand({domain:"core",keyword:"divide",lino:c,value1:b,value2:m,target:d}),!0;a.warning("core "+e.name+"': Expected value holder")}else return void 0===d&&a.warning("core "+e.name+"': No target variable given"),a.addCommand({domain:"core",keyword:"divide",lino:c,value2:m,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b= 27 c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];b?(a=a.getValue(b)/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)}):(f.numeric||a.error.nonNumericValueError(c,lino),a=f.content/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Encode:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken(); 28 a.next();a.addCommand({domain:"core",keyword:"encode",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);if(b.isValueHolder){var d=a.getValue(b.value);b.value[b.index]={type:"constant",numeric:"false",content:a.encode(d)};c.numeric=!1}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},End:{compile:function(a){a.next();return!0},run:function(){return 0}},Fork:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next(); 29 var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"fork",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];try{a.run(a.symbols[c.label].pc)}catch(h){console.log(h.message),alert(h.message)}return c.pc+1}},Go:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"goto",lino:c,label:b});return!0},run:function(a){return a[a.pc].pc+1}},Gosub:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&& 30 a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"gosub",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];a.stack.push(a.pc+1);return a.symbols[c.label].pc}},Goto:{compile:function(a){var c=a.getLino();a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"goto",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];return c.label?a.symbols[c.label].pc:c.goto}},If:{compile:function(a){var c=a.getLino();a.next();var b=a.condition.compile(a),d=a.getPc(); 31 a.addCommand({domain:"core",keyword:"if",lino:c,condition:b});a.compileOne();if(!a.getToken())return a.getCommandAt(d).else=a.getPc(),!0;a.tokenIs("else")?(c=a.getPc(),a.addCommand({domain:"core",keyword:"goto",goto:0}),a.getCommandAt(d).else=a.getPc(),a.next(),a.compileOne(!0),a.getCommandAt(c).goto=a.getPc()):a.getCommandAt(d).else=a.getPc();return!0},run:function(a){var c=a[a.pc];return a.condition.test(a,c.condition)?c.pc+1:c.else}},Index:{compile:function(a){var c=a.getLino();a.getTokens();a.next(); 32 if(a.isSymbol()){var b=a.getToken();a.next();if(a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"core",keyword:"index",lino:c,symbol:b,value:d});return!0}}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.index=a.getValue(c.value);b.index>=b.elements&&a.error.runtimeError(c.lino,"Array index out of range for "+b.name);return c.pc+1}},Multiply:{compile:function(a){var c=a.getLino();a.next();a.getToken();if(a.isSymbol()){var b=a.getSymbol();var d=a.getCommandAt(b.pc).name}b= 33 a.getValue();a.tokenIs("by")&&a.next();var e=a.getValue();if(a.tokenIs("giving")){a.next();if(a.isSymbol())return d=a.getSymbol(),d=a.getCommandAt(d.pc).name,a.next(),a.addCommand({domain:"core",keyword:"multiply",lino:c,value1:b,value2:e,target:d}),!0;a.warning("core multiply': Expected value holder")}else return void 0===d&&a.warning("core multiply': No target variable given"),a.addCommand({domain:"core",keyword:"multiply",lino:c,value2:e,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b= 34 c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];b?(a=a.getValue(b)*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a}):(f.numeric||a.error.nonNumericValueError(c,lino),a=f.content*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Negate:{compile:function(a){var c=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var b=a.getToken();a.next(); 35 a.addCommand({domain:"core",keyword:"negate",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.isValueHolder?b.value[b.index]={type:"constant",numeric:!0,content:-b.value[b.index].content}:a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Print:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"print",lino:c,value:b});return!0},run:function(a){var c=a[a.pc];a=a.getValue(c.value); 36 console.log("-> "+a);return c.pc+1}},Put:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("into")){a.next();if(a.isSymbol()){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"put",lino:c,value:b,target:d});return!0}a.error.noSuchVariableError(a.getToken())}return!1},run:function(a){var c=a[a.pc],b=c.value,d=a.getSymbolRecord(c.target);d.isValueHolder||a.error.variableDoesNotHoldAValueError(c.lino,d.name);d.value[d.index]=a.evaluate(b);return c.pc+1}}, 37 Replace:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("with")){a.next();var d=a.getValue();if(a.tokenIs("in")&&(a.next(),a.isSymbol())){var e=a.getSymbolRecord();a.next();if(e.isValueHolder)return a.addCommand({domain:"core",keyword:"replace",lino:c,original:b,replacement:d,target:e.name}),!0}}return!1},run:function(a){var c=a[a.pc],b=a.getValue(c.original),d=a.getValue(c.replacement),e=a.getSymbolRecord(c.target);a=a.getValue(e.value[e.index]).split(b).join(d);e.value[e.index]= 38 {type:"constant",numeric:!1,content:a};return c.pc+1}},Return:{compile:function(a){var c=a.getLino();a.next();a.addCommand({domain:"core",keyword:"return",lino:c});return!0},run:function(a){return a.stack.pop()}},Set:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getSymbolRecord();if(!b.isValueHolder)return!1;a.next();if(a.tokenIs("to")){a.next();for(var d=[];;){a.mark();try{d.push(a.getValue())}catch(m){a.rewind();break}}a.addCommand({domain:"core",keyword:"set",lino:c, 39 type:"setArray",target:b.name,value:d});return!0}a.addCommand({domain:"core",keyword:"set",lino:c,type:"setBoolean",target:b.name});return!0}a.tokenIs("the")&&a.next();if(a.tokenIs("elements")&&(a.next(),a.tokenIs("of")&&(a.next(),a.getTarget(),a.isSymbol()||a.error.unknownVariableError(a.getToken()),b=a.getToken(),a.next(),a.tokenIs("to"))))return a.next(),d=a.getValue(),a.addCommand({domain:"core",keyword:"set",lino:c,type:"setElements",symbol:b,value:d}),!0;if(a.tokenIs("encoding")){a.next();if(a.tokenIs("to"))return a.next(), 40 b=a.getValue(),a.addCommand({domain:"core",keyword:"set",type:"encoding",lino:c,encoding:b}),!0;a.addWarning("Unknown encoding option")}return!1},run:function(a){var c=a[a.pc];switch(c.type){case "setBoolean":var b=a.getSymbolRecord(c.target);b.isValueHolder?(b.value[b.index]={type:"boolean",content:!0},c.numeric=!1):a.error.VariableDoesNotHoldAValueError(tcommand.lino,arget.name);break;case "setElements":b=a.getSymbolRecord(c.symbol);b.elements=a.getValue(c.value);b.index=0;b.value=[];for(a=0;a< 41 b.elements;a++)b.value.push({});break;case "setArray":a=a.getSymbolRecord(c.target);a.elements=c.value.length;a.value=c.value;break;case "encoding":a.encoding=a.getValue(c.encoding)}return c.pc+1}},Stop:{compile:function(a){var c=a.getLino();a.next();a.addCommand({domain:"core",keyword:"stop",lino:c,next:0});return!0},run:function(){return 0}},Take:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("from"))if(a.next(),a.getToken(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"=== 42 a.peek()){d=a.getValue();a.next();var f=a.getToken();a.next();a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,value2:d,target:f})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,target:d});return!0}a.warning("core "+e.name+"': Expected value holder")}else{d=a.getValue();if(a.tokenIs("giving"))return a.next(),f=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,value2:d,target:f}),!0;a.warning("core "+e.name+'\': Expected "giving"')}return!1}, 43 run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];d?(a=a.getValue(d)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a}):(f.numeric||a.error.nonNumericValueError(c,lino),a=a.getValue(f)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Toggle:{compile:function(a){var c=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var b= 44 a.getSymbolPc();a.next();a.addCommand({domain:"core",keyword:"toggle",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a[c.symbol];if(b.isValueHolder){var d=a.domain[b.domain];a=d.value.get(a,b.value[b.index]).content;d.value.put(b,{type:"boolean",content:!a})}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Variable:{compile:function(a){a.compileVariable("core","variable",!0);return!0},run:function(a){return a[a.pc].pc+1}},Wait:{compile:function(a){var c= 45 a.getLino();a.next();var b=a.getValue(a),d=1E3;switch(a.getToken()){case "milli":case "millis":a.next();d=1;break;case "tick":case "ticks":a.next();d=10;break;case "second":case "seconds":a.next();d=1E3;break;case "minute":case "minutes":a.next(),d=6E4}a.addCommand({domain:"core",keyword:"wait",lino:c,value:b,multiplier:d});return!0},run:function(a){var c=a[a.pc],b=a.getValue(c.value);setTimeout(function(){a.run(c.pc+1)},b*c.multiplier);return 0}},While:{compile:function(a){var c=a.getLino();a.next(); 46 var b=a.getCondition(),d=a.getPc();a.addCommand({domain:"core",keyword:"while",lino:c,condition:b});c=a.getPc();a.addCommand({domain:"core",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"core",keyword:"goto",goto:d});a.getCommandAt(c).goto=a.getPc();return!0},run:function(a){return a.condition.test(a,a[a.pc].condition)?a.pc+2:a.pc+1}},getHandler:function(a){switch(a){case "add":return b.Add;case "alias":return b.Alias;case "begin":return b.Begin;case "clear":return b.Clear;case "debug":return b.Debug; 47 case "decode":return b.Decode;case "divide":return b.Divide;case "encode":return b.Encode;case "end":return b.End;case "fork":return b.Fork;case "go":return b.Go;case "gosub":return b.Gosub;case "goto":return b.Goto;case "if":return b.If;case "index":return b.Index;case "multiply":return b.Multiply;case "negate":return b.Negate;case "print":return b.Print;case "put":return b.Put;case "replace":return b.Replace;case "return":return b.Return;case "set":return b.Set;case "stop":return b.Stop;case "take":return b.Take; 48 case "toggle":return b.Toggle;case "variable":return b.Variable;case "wait":return b.Wait;case "while":return b.While;default:return!1}},run:function(a){var c=a[a.pc],d=b.getHandler(c.keyword);d||a.error.runtimeError(c.lino,"Unknown keyword '"+c.keyword+"' in 'core' package");return d.run(a)},isNegate:function(a){return"not"===a.getToken()?(a.next(),!0):!1},value:{compile:function(a){if(a.isSymbol()){var c=a.getToken();a.next();return a.tokenIs("modulo")?(a.next(),a=a.getValue(),{domain:"core",type:"modulo", 49 name:c,value:a}):{domain:"core",type:"symbol",name:c}}c=a.getToken();if("true"===c)return a.next(),{domain:"core",type:"boolean",content:!0};if("false"===c)return a.next(),{domain:"core",type:"boolean",content:!1};if("random"===c)return a.next(),{domain:"core",type:"random",range:a.getValue()};if("cos"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"cos",angle_c:c,radius_c:a};if("sin"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core", 50 type:"sin",angle_s:c,radius_s:a};if("tan"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"tan",angle_t:c,radius_t:a};if("empty"===c)return a.next(),{domain:"core",type:"empty"};if("encode"===c)return a.next(),{domain:"core",type:"encode",value:a.getValue()};if("decode"===c)return a.next(),{domain:"core",type:"decode",value:a.getValue()};if("element"===c){a.next();c=a.getValue();if(a.tokenIs("of")&&(a.next(),a.isSymbol())){var b=a.getSymbolRecord();a.next(); 51 if("variable"===b.keyword)return{domain:"core",type:"element",element:c,symbol:b.name}}return null}if("property"===c)return a.next(),c=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(b=a.getSymbolRecord(),a.next(),"variable"===b.keyword))?{domain:"core",type:"property",property:c,symbol:b.name}:null;a.tokenIs("the")&&a.next();switch(a.getToken()){case "index":a.next();if(a.tokenIs("of")&&(a.next(),a.isSymbol()))return c=a.getToken(),a.next(),{domain:"core",type:"index",name:c};break;case "value":a.next(); 52 if(a.tokenIs("of"))return a.next(),{domain:"core",type:"valueOf",value:a.getValue()};break;case "length":a.next();if(a.tokenIs("of"))return a.next(),{domain:"core",type:"lengthOf",value:a.getValue()};break;case "left":a.next();c=a.getValue();if(a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"core",type:"left",count:c,value:a};break;case "right":if(a.next(),c=a.getValue(),a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"core",type:"right",count:c,value:a}}return null},get:function(a, 53 b){switch(b.type){case "boolean":return{type:"boolean",numeric:!1,content:b.content};case "index":return{type:"constant",numeric:!0,content:a.getSymbolRecord(b.name).index};case "random":return a=a.evaluate(b.range),{type:"constant",numeric:!0,content:Math.floor(Math.random()*a.content)};case "cos":var c=a.getValue(b.angle_c);a=a.getValue(b.radius_c);return{type:"constant",numeric:!0,content:parseInt(Math.cos(.01745329*parseFloat(c))*a,10)};case "sin":return c=a.getValue(b.angle_s),a=a.getValue(b.radius_s), 54 {type:"constant",numeric:!0,content:parseInt(Math.sin(.01745329*parseFloat(c))*a,10)};case "tan":return c=a.getValue(b.angle_t),a=a.getValue(b.radius_t),{type:"constant",numeric:!0,content:parseInt(Math.tan(.01745329*parseFloat(c))*a,10)};case "valueOf":return{type:"constant",numeric:!0,content:parseInt(a.getValue(b.value))};case "lengthOf":return{type:"constant",numeric:!0,content:a.getValue(b.value).length};case "left":return a.getValue(b.value),{type:"constant",numeric:!1,content:a.getValue(b.value).substr(0, 55 a.getValue(b.count))};case "modulo":return c=a.getSymbolRecord(b.name),a=a.evaluate(b.value),{type:"constant",numeric:!0,content:c.value[c.index].content%a.content};case "empty":return{type:"constant",numeric:!1,content:""};case "encode":return{type:"constant",numeric:!1,content:a.encode(a.getValue(b.value))};case "decode":return{type:"constant",numeric:!1,content:a.decode(a.getValue(b.value))};case "element":return c=a.getValue(b.element),b=a.getSymbolRecord(b.symbol),a=JSON.parse(a.getValue(b.value[b.index]))[c], 56 {type:"constant",numeric:!1,content:"object"===typeof a?JSON.stringify(a):a};case "property":return c=a.getValue(b.property),b=a.getSymbolRecord(b.symbol),a=a.getValue(b.value[b.index]),{type:"constant",numeric:!1,content:"object"===typeof a?a[c]:JSON.parse(a)[c]}}return null},put:function(a,b){a.value[a.index]=b}},condition:{compile:function(a){if(a.tokenIs("not"))return a.next(),{domain:"core",type:"not",value:a.getValue()};try{var c=a.getValue();if("is"===a.getToken()){a.next();var d=b.isNegate(a); 57 if(a.tokenIs("greater")){a.next();if(a.tokenIs("than")){a.next();var e=a.getValue();return{domain:"core",type:"greater",value1:c,value2:e,negate:d}}return null}if(a.tokenIs("less")){a.next();if(a.tokenIs("than")){a.next();var f=a.getValue();return{domain:"core",type:"less",value1:c,value2:f,negate:d}}return null}var g=a.getValue();return{domain:"core",type:"is",value1:c,value2:g,negate:d}}if(c)return{domain:"core",type:"boolean",value:c}}catch(n){console.log(n)}return null},test:function(a,b){switch(b.type){case "boolean":return a.getValue(b.value); 58 case "is":return a=a.compare(a,b.value1,b.value2),b.negate?0!==a:0===a;case "greater":return a=a.compare(a,b.value1,b.value2),b.negate?0>=a:0<a;case "less":return a=a.compare(a,b.value1,b.value2),b.negate?0<=a:0>a;case "not":return!a.getValue(b.value)}}}};f.exports=b},{}],6:[function(d,f,g){var e=this,b=d("./Tokenise"),a=d("./Compile"),c=d("./Run"),h=d("./Value"),k=d("./Condition"),m=d("./Compare"),l={domain:{core:d("./Core")},compileError:{dontUnderstandError:function(a){throw Error("I don't understand '"+ 59 a+"'");},duplicateSymbolError:function(a){throw Error("Symbol '"+a+"' is a duplicate");},inappropriateTypeError:function(a){throw Error("Inappropriate type '"+a+"'");},inappropriateVariableTypeError:function(a){throw Error("Inappropriate variable type '"+a+"'");},missingInputTypeError:function(){throw Error("Missing input type");},noSuchVariableError:function(a){throw Error("No such variable: "+a);},notAnIntegerError:function(a){throw Error("Value is not an integer: "+a);},undefinedValueError:function(a){throw Error("Undefined value: "+ 60 a);},unknownTypeError:function(a){throw Error("Unknown type: "+a);},unknownVariableError:function(a){throw Error("Unknown variable: "+a);},unrecognisedValueError:function(a){throw Error("I don't understand this value: "+a);},variableDoesNotHoldAValueError:function(a){throw Error("Variable '"+a+"' does not hold a value");},expectedError:function(a,b){throw Error("Expected '"+a+"' but saw '"+b+"'");},symbolExpectedError:function(a){throw Error("Symbol expected: got "+a);}},runtimeError:{runtimeError:function(a, 61 b){throw Error("Line "+(0<=a)?a+1+": ":""+b);},nonNumericValueError:function(a){runtimeError(a,"Non-numeric value")},variableDoesNotHoldAValueError:function(a,b){runtimeError(a,"Variable '"+b+"' does not hold a value")}},setupTracer:function(){var a=document.getElementById("easycoder-tracer");a&&(a.innerHTML='<div><input id="easycoder-run-button" type="button" value="Run" /><input id="easycoder-step-button" type="button" value="Step" /><div id="easycoder-tracer-content" style="border:1px solid black;padding:4px";width:100%></div>', 62 a.style.display="none")},reportError:function(b,c){if(c){var d=a.getProgram(),f=c.tokens;c=c.scriptLines;f=e.compiling?f[a.getIndex()].lino:d.pc.lino;d="";var k=f-5;for(k=0>k?0:k;k<f;k++){for(var h=""+k;4>h.length;)h=" "+h;d+=h+" "+c[k].line.split("\\s").join(" ")+"\n"}d+=b.message+"\n";b=a.getWarnings();if(b.length)for(d+="Warnings:\n",b=$jscomp.makeIterator(b),c=b.next();!c.done;c=b.next())d+=c.value+"\n";console.log(d);alert(d)}else console.log(b),alert(b)},getSymbolRecord:function(a){a=e.program[e.program.symbols[a].pc]; 63 return a.alias?e.program[e.program.symbols[a.alias].pc]:a},evaluate:function(a){return h.evaluate(e.program,a)},encode:function(a){return h.encode(a,e.program.encoding)},decode:function(a){return h.decode(a,e.program.encoding)},getValue:function(a){return h.getValue(e.program,a)},run:function(a){c(e.program,a)},compileScript:function(b){var c=b.tokens;e.compiling=!0;var d=Date.now();a.value=h;a.condition=k;a.domain=l.domain;a.error=l.compileError;var f=a.compile(c);e.program=f;var g=Date.now();console.log("Compiled "+ 64 c.length+" tokens in "+(g-d)+"ms");e.compiling=!1;f.source=b;f.run=l.run;f.value=h;f.evaluate=l.evaluate;f.getValue=l.getValue;f.encode=l.encode;f.decode=l.decode;f.condition=k;f.compare=m;f.domain=l.domain;f.getSymbolRecord=l.getSymbolRecord;f.error=l.runtimeError;f.reportError=l.reportError;f.symbols=a.getSymbols();f.encoding="none";f.popups=[];f.stack=[];f.queue=[0];l.setupTracer();console.log("Run the script");f.run(0)},tokeniseScript:function(a){var c=Date.now();a=b.tokenise(a);var d=Date.now(); 65 console.log("Tokenised "+a.scriptLines.length+" lines in "+(d-c)+"ms");l.compileScript(a)},getPlugins:function(a,b,c){var d=l.domain,e=document.head,f=document.createElement("script");f.onload=function(){b.forEach(function(a,b){var c=a;if("http"!==a&&0===a.indexOf("http")){c=a.indexOf("plugin-")+7;var e=a.indexOf(".js");c=a.substring(c,e)}switch(b){case 0:d[c]=EasyCoder_0;break;case 1:d[c]=EasyCoder_1;break;case 2:d[c]=EasyCoder_2;break;case 3:d[c]=EasyCoder_3;break;case 4:d[c]=EasyCoder_4;break; 66 case 5:d[c]=EasyCoder_5;break;case 6:d[c]=EasyCoder_6;break;case 7:d[c]=EasyCoder_7;break;case 8:d[c]=EasyCoder_8;break;case 9:d[c]=EasyCoder_9}});try{l.tokeniseScript(a)}catch(t){l.reportError(t)}};f.src=c?"plugins.js":"/rest//plugins/"+b.join();e.appendChild(f)},start:function(a){var b=!1,c=[],d=[];a.split("\n").forEach(function(a){var e=a.trim().split(" ");"*debug*"===e[0]?(c.length=0,b=!0):2===e.length?"plugin"===e[0]?(a=e[1].trim().split("/").join("~"),c.push(a)):d.push(a):d.push(a)});0===c.length&& 67 (c.push("browser"),c.push("json"),c.push("svg"),b&&c.push("ckeditor"));l.getPlugins(d,c,b)}};f.exports=l},{"./Compare":2,"./Compile":3,"./Condition":4,"./Core":5,"./Run":7,"./Tokenise":8,"./Value":9}],7:[function(d,f,g){var e=function(b,a){var c=function(a){var b=9999;a.forEach(function(a){a=a.line;for(var c=0;c<a.length&&" "===a[c];)c++;0<c&&c<b&&(b=c)});return 0},d=[];if(d.length)d.push(a);else for(d.push(a);0<d.length;)for(b.pc=d.shift(),a={};;){b.pc=b.domain[b[b.pc].domain].run(b);if(!b.pc)break; 68 if(b.stop){b.tracing=!1;return}if(b.tracing){var f=b[b.pc],g=b.source.scriptLines,l=c(g),n=document.getElementById("easycoder-tracer");if(n){n.style.display="block";n.style.visibility="visible";var p="";if(b.tracer){b.tracer.variables.forEach(function(a,c,d){var e=b.getSymbolRecord(a);p=(e=e.value[e.index])?p+(a+": "+e.content):p+(a+": undefined");switch(b.tracer.alignment){case "horizontal":c<d.length-1&&(p+=", ");break;case "vertical":p+="<br>"}});p+="<hr>";n="";for(var q=5;0<q;q--)f.lino&&(n+= 69 '<input type="text" name="'+q+'" value="'+g[f.lino-q].line.substr(l)+'"style=width:100%;border:none;enabled="false">'),n+="<br>";f=document.getElementById("easycoder-tracer-content");f.innerHTML=p+n;f.style.display="block";a.run=document.getElementById("easycoder-run-button");a.step=document.getElementById("easycoder-step-button");a.run.onclick=function(a){return function(c){a.run.blur();b.tracing=!1;document.getElementById("easycoder-tracer-content").style.display="none";try{e(b,b.resume)}catch(r){c= 70 "Error in run handler: "+r.message,console.log(c),alert(c)}}}(a);a.step.onclick=function(a){return function(c){console.log("step");a.step.blur();b.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{e(b,b.resume)}catch(r){c="Error in step handler: "+r.message,console.log(c),alert(c)}}}(a);b.resume=b.pc;b.pc=0}}break}a={run:a.run,step:a.step}}};f.exports=e},{}],8:[function(d,f,g){var e={markComments:function(b){var a=b.list,c=void 0===b.index?0:b.index,d=void 0=== 71 b.inComment?!1:b.inComment,f=void 0===b.newList?[]:b.newList;if(c>=a.length)return f;var g=a[c];b=g.lino;g=g.token;var l={list:a,index:c+1,inComment:!1,newList:f.concat({lino:b,index:c,token:g})};f={list:a,index:c+1,inComment:!0,newList:f.concat({lino:b,index:c,comment:!0,token:g})};return d&&0<c&&b===a[c-1].lino?e.markComments(f):"!"===g.charAt(0)?e.markComments(f):e.markComments(l)},findStrings:function(b){var a=b.original,c=b.line,d=void 0===b.inComment?!1:b.inComment;b=void 0===b.inQuote?!1:b.inQuote; 72 var f=c.charAt(0),g=b&&" "===f?"\\s":f;if(1===c.length)return g;c=c.substring(1);if("!"===f&&!b)return f+e.findStrings({original:a,line:c,inComment:!0,inQuote:!1});if("`"===f&&!d&&!b)return f+e.findStrings({original:a,line:c,inComment:d,inQuote:!0});if("`"===f&&b)return f+e.findStrings({original:a,line:c,inComment:d,inQuote:!1});if(!d&&!b&&!f.match(/[A-z0-9_\-\+\*\/\- ]/)){if("'"==f||'"'==f)throw Error('Bad syntax in "'+a+'":\nStrings in EasyCoder must be enclosed in backticks.');throw Error('Unrecognised character "'+ 73 f+'" in "'+a+'".');}return g+e.findStrings({original:a,line:c,inComment:d,inQuote:b})},tokenise:function(b){b=b.map(function(a){return a.length?e.findStrings({original:a,line:a}):""}).map(function(a,b){return{lino:b+1,line:a}});var a=b.map(function(a){return a.line.trim().split(/\s+/).map(function(b,c){return{lino:a.lino,index:c,token:b}})});a=[].concat.apply([],a).filter(function(a){return a.token}).map(function(a){return{lino:a.lino,index:a.index,token:a.token.split("\\s").join(" ")}});a=e.markComments({list:a}).filter(function(a){return!a.comment}); 74 return{scriptLines:b,tokens:a}}};f.exports=e},{}],9:[function(d,f,g){var e={getItem:function(b){var a=b.getToken();if(!a)return null;if("`"===a.charAt(0))return b.next(),{type:"constant",numeric:!1,content:a.substring(1,a.length-1)};if(a[0].match(/[0-9\-]/)){var c=eval(a);if(Number.isInteger(c))return b.next(),{type:"constant",numeric:!0,content:c};b.error.notAnIntegerError(a)}b.mark();a=$jscomp.makeIterator(Object.keys(b.domain));for(c=a.next();!c.done;c=a.next())if(c=b.domain[c.value].value.compile(b))return c; 75 return null},compile:function(b){var a=b.getToken(),c=b.value.getItem(b);c||b.error.undefinedValueError(a);if("cat"===b.getToken()){for(a={type:"cat",numeric:!1,parts:[c]};b.tokenIs("cat");)b.next(),a.parts.push(b.value.getItem(b));return a}return c},doValue:function(b,a){if("cat"===a.type)return{type:"constant",numeric:!1,content:a.parts.reduce(function(a,c){return a+e.doValue(b,c).content},"")};switch(a.type){case "constant":return a;case "symbol":var c=b.getSymbolRecord(a.name);return c.isValueHolder? 76 c.value[c.index]?c.value[c.index]:null:b.domain[c.domain].value.get(b,a);case "boolean":return a}return b.domain[a.domain].value.get(b,a)},constant:function(b){return{type:"constant",numeric:"false",content:b}},evaluate:function(b,a){if(!a)return{type:"constant",numeric:!1,content:""};var c=e.doValue(b,a);if(c)return c;b.error.runtimeError(b[b.pc].lino,"Can't decode value: "+a)},getValue:function(b,a){return e.evaluate(b,a).content},encode:function(b,a){switch(a){case "url":return encodeURIComponent(b.replace(/\s/g, 77 "+"));default:return b}},decode:function(b,a){switch(a){case "url":return decodeURIComponent(b).replace(/\+/g," ");default:return b}}};f.exports=e},{}]},{},[1]); 15 getCondition:function(){return a.condition.compile(a)},constant:function(c){return a.value.constant(c)},addCommand:function(a){b.program.push(e({pc:b.program.length},a))},addSymbol:function(a,k){b.symbols[a]={pc:k}},mark:function(){b.savedMark=b.index},rewind:function(){b.index=b.savedMark},compileVariable:function(c,k,h,d){h=void 0===h?!1:h;d=void 0===d?null:d;a.next();var n=a.getLino(),e=a.getTokens()[a.getIndex()];if(b.symbols[e.token])throw Error("Duplicate variable name '"+e.token+"'");var f= 16 a.getPc();a.next();a.addSymbol(e.token,f);a.addCommand({domain:c,keyword:k,lino:n,isSymbol:!0,isValueHolder:h,name:e.token,elements:1,index:0,value:[{}],extra:d})},compileToken:function(){var c=a.getToken();if(c){a.getIndex();a.mark();for(var b=$jscomp.makeIterator(Object.keys(a.domain)),h=b.next();!h.done;h=b.next()){if((h=a.domain[h.value])&&(h=h.getHandler(c))&&h.compile(a))return;a.rewind()}console.log("No handler found");throw Error("I don't understand '"+c+"'");}},compileOne:function(){var c= 17 a.getToken();if(c){b.warnings=[];var k=b.program.length;c.endsWith(":")?(b.symbols[c.substring(0,c.length-1)]={pc:k},b.index++):a.compileToken()}},compileFromHere:function(c){for(;b.index<b.tokens.length;){var k=b.tokens[b.index].token;if("else"===k)return b.program;a.compileOne();if(-1<c.indexOf(k))break}},compile:function(c){b.tokens=c;b.index=0;b.program=[];b.symbols={};b.warnings=[];a.compileFromHere([]);a.addCommand({domain:"core",keyword:"stop",lino:a.getLino(),next:0});return b.program}};f.exports= 18 a},{}],4:[function(d,f,g){var e=Object.assign||function(b){for(var a=1;a<arguments.length;a++){var c=arguments[a],k;for(k in c)Object.prototype.hasOwnProperty.call(c,k)&&(b[k]=c[k])}return b};f.exports={compile:function(b){b.mark();for(var a=$jscomp.makeIterator(Object.keys(b.domain)),c=a.next();!c.done;c=a.next()){if(c=b.domain[c.value].condition.compile(b))return e({domain:name},c);b.rewind()}},test:function(b,a){return b.domain[a.domain].condition.test(b,a)}}},{}],5:[function(d,f,g){var e=this, 19 b={Add:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("to"))if(a.next(),a.getToken(),a.isSymbol()){var h=a.getSymbol();if(a.getCommandAt(h.pc).isValueHolder){if("giving"===a.peek()){h=a.getValue();a.next();var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,value2:h,target:d})}else h=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,target:h});return!0}a.warning("core "+e.name+"': Expected value holder")}else{h= 20 a.getValue();if(a.tokenIs("giving"))return a.next(),d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"add",lino:c,value1:b,value2:h,target:d}),!0;a.warning("core "+e.name+'\': Expected "giving"')}return!1},run:function(a){var c=a[a.pc],b=c.value1,h=c.value2,d=a.getSymbolRecord(c.target);if(d.isValueHolder){var e=d.value[d.index];h?(a=a.getValue(h)+a.getValue(b),d.value[d.index]={type:"constant",numeric:!0,content:a}):(e.numeric||a.error.nonNumericValueError(c.lino),a=e.content+a.getValue(b), 21 d.value[d.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,d.name);return c.pc+1}},Alias:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();if(a.tokenIs("to")&&(a.next(),a.isSymbol())){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"alias",lino:c,alias:b,symbol:d});return!0}}return!1},run:function(a){var c=a[a.pc],b=a.symbols[c.alias].pc,d=a[b],e=a.getSymbolRecord(c.symbol);a[b]={pc:d.pc,domain:e.domain, 22 keyword:e.keyword,lino:d.lino,name:d.name,alias:c.symbol};return c.pc+1}},Begin:{compile:function(a){a.next();a.compileFromHere(["end"]);return!0},run:function(a){return a[a.pc].pc+1}},Clear:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"clear",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.isValueHolder?(a.domain[b.domain].value.put(b,{type:"boolean",content:!1}), 23 c.numeric=!1):a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Debug:{compile:function(a){var c=a.getLino();a.next();if(a.tokenIs("program")){a.next();if(a.tokenIs("item")||a.tokenIs("pc")){a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"debug",lino:c,item:b});return!0}a.addCommand({domain:"core",keyword:"debug",lino:c,item:-1});return!0}if(a.tokenIs("symbols"))return a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbols"}),!0;if(a.tokenIs("symbol"))return a.next(), 24 b=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbol",name:b}),!0;throw Error("No such variable: '"+a.getToken()+"'");},run:function(a){var c=a[a.pc],b=c.item;switch(b){case "symbols":console.log("Symbols: "+JSON.stringify(a.symbols,null,2));break;case "symbol":console.log("Symbol: "+JSON.stringify(a.getSymbolRecord(c.name),null,2));break;default:0<=b.content?console.log("Debug item "+b.content+": "+JSON.stringify(a[b.content],null,2)):console.log("Debug program: "+ 25 JSON.stringify(a,null,2))}return c.pc+1}},Decode:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"decode",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);if(b.isValueHolder){var d=a.getValue(b.value);b.value[b.index]={type:"constant",numeric:"false",content:a.decode(d)};c.numeric=!1}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Divide:{compile:function(a){var c= 26 a.getLino();a.next();a.getToken();if(a.isSymbol()){var b=a.getSymbol();var d=a.getCommandAt(b.pc).name}b=a.getValue();a.tokenIs("by")&&a.next();var n=a.getValue();if(a.tokenIs("giving")){a.next();if(a.isSymbol())return d=a.getSymbol(),d=a.getCommandAt(d.pc).name,a.next(),a.addCommand({domain:"core",keyword:"divide",lino:c,value1:b,value2:n,target:d}),!0;a.warning("core "+e.name+"': Expected value holder")}else return void 0===d&&a.warning("core "+e.name+"': No target variable given"),a.addCommand({domain:"core", 27 keyword:"divide",lino:c,value2:n,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];b?(a=a.getValue(b)/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)}):(f.numeric||a.error.nonNumericValueError(c,lino),a=f.content/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}}, 28 Encode:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"encode",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);if(b.isValueHolder){var d=a.getValue(b.value);b.value[b.index]={type:"constant",numeric:"false",content:a.encode(d)};c.numeric=!1}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},End:{compile:function(a){a.next();return!0},run:function(){return 0}}, 29 Fork:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"fork",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];try{a.run(a.symbols[c.label].pc)}catch(k){console.log(k.message),alert(k.message)}return c.pc+1}},Go:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"goto",lino:c,label:b});return!0},run:function(a){return a[a.pc].pc+ 30 1}},Gosub:{compile:function(a){var c=a.getLino();a.next();a.tokenIs("to")&&a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"gosub",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];a.stack.push(a.pc+1);return a.symbols[c.label].pc}},Goto:{compile:function(a){var c=a.getLino();a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"goto",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];return c.label?a.symbols[c.label].pc:c.goto}},If:{compile:function(a){var c= 31 a.getLino();a.next();var b=a.condition.compile(a),d=a.getPc();a.addCommand({domain:"core",keyword:"if",lino:c,condition:b});a.compileOne();if(!a.getToken())return a.getCommandAt(d).else=a.getPc(),!0;a.tokenIs("else")?(c=a.getPc(),a.addCommand({domain:"core",keyword:"goto",goto:0}),a.getCommandAt(d).else=a.getPc(),a.next(),a.compileOne(!0),a.getCommandAt(c).goto=a.getPc()):a.getCommandAt(d).else=a.getPc();return!0},run:function(a){var c=a[a.pc];return a.condition.test(a,c.condition)?c.pc+1:c.else}}, 32 Index:{compile:function(a){var c=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var b=a.getToken();a.next();if(a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"core",keyword:"index",lino:c,symbol:b,value:d});return!0}}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.index=a.getValue(c.value);b.index>=b.elements&&a.error.runtimeError(c.lino,"Array index out of range for "+b.name);return c.pc+1}},Multiply:{compile:function(a){var c=a.getLino();a.next(); 33 a.getToken();if(a.isSymbol()){var b=a.getSymbol();var d=a.getCommandAt(b.pc).name}b=a.getValue();a.tokenIs("by")&&a.next();var e=a.getValue();if(a.tokenIs("giving")){a.next();if(a.isSymbol())return d=a.getSymbol(),d=a.getCommandAt(d.pc).name,a.next(),a.addCommand({domain:"core",keyword:"multiply",lino:c,value1:b,value2:e,target:d}),!0;a.warning("core multiply': Expected value holder")}else return void 0===d&&a.warning("core multiply': No target variable given"),a.addCommand({domain:"core",keyword:"multiply", 34 lino:c,value2:e,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];b?(a=a.getValue(b)*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a}):(f.numeric||a.error.nonNumericValueError(c,lino),a=f.content*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Negate:{compile:function(a){var c=a.getLino(); 35 a.getTokens();a.next();if(a.isSymbol()){var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"negate",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);b.isValueHolder?b.value[b.index]={type:"constant",numeric:!0,content:-b.value[b.index].content}:a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Print:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"print",lino:c,value:b}); 36 return!0},run:function(a){var c=a[a.pc];a=a.getValue(c.value);console.log("-> "+a);return c.pc+1}},Put:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("into")){a.next();if(a.isSymbol()){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"put",lino:c,value:b,target:d});return!0}throw Error("No such variable: '"+a.getToken()+"'");}return!1},run:function(a){var c=a[a.pc],b=c.value,d=a.getSymbolRecord(c.target);d.isValueHolder||a.error.variableDoesNotHoldAValueError(c.lino, 37 d.name);d.value[d.index]=a.evaluate(b);return c.pc+1}},Replace:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue();if(a.tokenIs("with")){a.next();var d=a.getValue();if(a.tokenIs("in")&&(a.next(),a.isSymbol())){var e=a.getSymbolRecord();a.next();if(e.isValueHolder)return a.addCommand({domain:"core",keyword:"replace",lino:c,original:b,replacement:d,target:e.name}),!0}}return!1},run:function(a){var c=a[a.pc],b=a.getValue(c.original),d=a.getValue(c.replacement),e=a.getSymbolRecord(c.target); 38 a=a.getValue(e.value[e.index]).split(b).join(d);e.value[e.index]={type:"constant",numeric:!1,content:a};return c.pc+1}},Return:{compile:function(a){var c=a.getLino();a.next();a.addCommand({domain:"core",keyword:"return",lino:c});return!0},run:function(a){return a.stack.pop()}},Set:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getSymbolRecord();if(!b.isValueHolder)return!1;a.next();if(a.tokenIs("to")){a.next();for(var d=[];;){a.mark();try{d.push(a.getValue())}catch(n){a.rewind(); 39 break}}a.addCommand({domain:"core",keyword:"set",lino:c,type:"setArray",target:b.name,value:d});return!0}a.addCommand({domain:"core",keyword:"set",lino:c,type:"setBoolean",target:b.name});return!0}a.tokenIs("the")&&a.next();if(a.tokenIs("elements")&&(a.next(),a.tokenIs("of"))){a.next();a.getTarget();if(!a.isSymbol())throw Error("Unknown variable '"+a.getToken()+"'");b=a.getToken();a.next();if(a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"core",keyword:"set",lino:c,type:"setElements", 40 symbol:b,value:d}),!0}if(a.tokenIs("encoding")){a.next();if(a.tokenIs("to"))return a.next(),b=a.getValue(),a.addCommand({domain:"core",keyword:"set",type:"encoding",lino:c,encoding:b}),!0;a.addWarning("Unknown encoding option")}return!1},run:function(a){var c=a[a.pc];switch(c.type){case "setBoolean":var b=a.getSymbolRecord(c.target);b.isValueHolder?(b.value[b.index]={type:"boolean",content:!0},c.numeric=!1):a.error.VariableDoesNotHoldAValueError(tcommand.lino,arget.name);break;case "setElements":b= 41 a.getSymbolRecord(c.symbol);b.elements=a.getValue(c.value);b.index=0;b.value=[];for(a=0;a<b.elements;a++)b.value.push({});break;case "setArray":a=a.getSymbolRecord(c.target);a.elements=c.value.length;a.value=c.value;break;case "encoding":a.encoding=a.getValue(c.encoding)}return c.pc+1}},Stop:{compile:function(a){var c=a.getLino();a.next();a.addCommand({domain:"core",keyword:"stop",lino:c,next:0});return!0},run:function(){return 0}},Take:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue(); 42 if(a.tokenIs("from"))if(a.next(),a.getToken(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"===a.peek()){d=a.getValue();a.next();var f=a.getToken();a.next();a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,value2:d,target:f})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,target:d});return!0}a.warning("core "+e.name+"': Expected value holder")}else{d=a.getValue();if(a.tokenIs("giving"))return a.next(),f=a.getToken(), 43 a.next(),a.addCommand({domain:"core",keyword:"take",lino:c,value1:b,value2:d,target:f}),!0;a.warning("core "+e.name+'\': Expected "giving"')}return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,e=a.getSymbolRecord(c.target);if(e.isValueHolder){var f=e.value[e.index];d?(a=a.getValue(d)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a}):(f.numeric||a.error.nonNumericValueError(c,lino),a=a.getValue(f)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(c.lino, 44 e.name);return c.pc+1}},Toggle:{compile:function(a){var c=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var b=a.getSymbolPc();a.next();a.addCommand({domain:"core",keyword:"toggle",lino:c,symbol:b});return!0}return!1},run:function(a){var c=a[a.pc],b=a[c.symbol];if(b.isValueHolder){var d=a.domain[b.domain];a=d.value.get(a,b.value[b.index]).content;d.value.put(b,{type:"boolean",content:!a})}else a.error.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Variable:{compile:function(a){a.compileVariable("core", 45 "variable",!0);return!0},run:function(a){return a[a.pc].pc+1}},Wait:{compile:function(a){var c=a.getLino();a.next();var b=a.getValue(a),d=1E3;switch(a.getToken()){case "milli":case "millis":a.next();d=1;break;case "tick":case "ticks":a.next();d=10;break;case "second":case "seconds":a.next();d=1E3;break;case "minute":case "minutes":a.next(),d=6E4}a.addCommand({domain:"core",keyword:"wait",lino:c,value:b,multiplier:d});return!0},run:function(a){var c=a[a.pc],b=a.getValue(c.value);setTimeout(function(){a.run(c.pc+ 46 1)},b*c.multiplier);return 0}},While:{compile:function(a){var c=a.getLino();a.next();var b=a.getCondition(),d=a.getPc();a.addCommand({domain:"core",keyword:"while",lino:c,condition:b});c=a.getPc();a.addCommand({domain:"core",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"core",keyword:"goto",goto:d});a.getCommandAt(c).goto=a.getPc();return!0},run:function(a){return a.condition.test(a,a[a.pc].condition)?a.pc+2:a.pc+1}},getHandler:function(a){switch(a){case "add":return b.Add;case "alias":return b.Alias; 47 case "begin":return b.Begin;case "clear":return b.Clear;case "debug":return b.Debug;case "decode":return b.Decode;case "divide":return b.Divide;case "encode":return b.Encode;case "end":return b.End;case "fork":return b.Fork;case "go":return b.Go;case "gosub":return b.Gosub;case "goto":return b.Goto;case "if":return b.If;case "index":return b.Index;case "multiply":return b.Multiply;case "negate":return b.Negate;case "print":return b.Print;case "put":return b.Put;case "replace":return b.Replace;case "return":return b.Return; 48 case "set":return b.Set;case "stop":return b.Stop;case "take":return b.Take;case "toggle":return b.Toggle;case "variable":return b.Variable;case "wait":return b.Wait;case "while":return b.While;default:return!1}},run:function(a){var c=a[a.pc],d=b.getHandler(c.keyword);d||a.error.runtimeError(c.lino,"Unknown keyword '"+c.keyword+"' in 'core' package");return d.run(a)},isNegate:function(a){return"not"===a.getToken()?(a.next(),!0):!1},value:{compile:function(a){if(a.isSymbol()){var c=a.getToken();a.next(); 49 return a.tokenIs("modulo")?(a.next(),a=a.getValue(),{domain:"core",type:"modulo",name:c,value:a}):{domain:"core",type:"symbol",name:c}}c=a.getToken();if("true"===c)return a.next(),{domain:"core",type:"boolean",content:!0};if("false"===c)return a.next(),{domain:"core",type:"boolean",content:!1};if("random"===c)return a.next(),{domain:"core",type:"random",range:a.getValue()};if("cos"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"cos",angle_c:c,radius_c:a};if("sin"=== 50 c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"sin",angle_s:c,radius_s:a};if("tan"===c)return a.next(),c=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"tan",angle_t:c,radius_t:a};if("empty"===c)return a.next(),{domain:"core",type:"empty"};if("encode"===c)return a.next(),{domain:"core",type:"encode",value:a.getValue()};if("decode"===c)return a.next(),{domain:"core",type:"decode",value:a.getValue()};if("element"===c){a.next();c=a.getValue(); 51 if(a.tokenIs("of")&&(a.next(),a.isSymbol())){var b=a.getSymbolRecord();a.next();if("variable"===b.keyword)return{domain:"core",type:"element",element:c,symbol:b.name}}return null}if("property"===c)return a.next(),c=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(b=a.getSymbolRecord(),a.next(),"variable"===b.keyword))?{domain:"core",type:"property",property:c,symbol:b.name}:null;a.tokenIs("the")&&a.next();switch(a.getToken()){case "index":a.next();if(a.tokenIs("of")&&(a.next(),a.isSymbol()))return c= 52 a.getToken(),a.next(),{domain:"core",type:"index",name:c};break;case "value":a.next();if(a.tokenIs("of"))return a.next(),{domain:"core",type:"valueOf",value:a.getValue()};break;case "length":a.next();if(a.tokenIs("of"))return a.next(),{domain:"core",type:"lengthOf",value:a.getValue()};break;case "left":a.next();c=a.getValue();if(a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"core",type:"left",count:c,value:a};break;case "right":if(a.next(),c=a.getValue(),a.tokenIs("of"))return a.next(),a= 53 a.getValue(),{domain:"core",type:"right",count:c,value:a}}return null},get:function(a,b){switch(b.type){case "boolean":return{type:"boolean",numeric:!1,content:b.content};case "index":return{type:"constant",numeric:!0,content:a.getSymbolRecord(b.name).index};case "random":return a=a.evaluate(b.range),{type:"constant",numeric:!0,content:Math.floor(Math.random()*a.content)};case "cos":var c=a.getValue(b.angle_c);a=a.getValue(b.radius_c);return{type:"constant",numeric:!0,content:parseInt(Math.cos(.01745329* 54 parseFloat(c))*a,10)};case "sin":return c=a.getValue(b.angle_s),a=a.getValue(b.radius_s),{type:"constant",numeric:!0,content:parseInt(Math.sin(.01745329*parseFloat(c))*a,10)};case "tan":return c=a.getValue(b.angle_t),a=a.getValue(b.radius_t),{type:"constant",numeric:!0,content:parseInt(Math.tan(.01745329*parseFloat(c))*a,10)};case "valueOf":return{type:"constant",numeric:!0,content:parseInt(a.getValue(b.value))};case "lengthOf":return{type:"constant",numeric:!0,content:a.getValue(b.value).length}; 55 case "left":return a.getValue(b.value),{type:"constant",numeric:!1,content:a.getValue(b.value).substr(0,a.getValue(b.count))};case "modulo":return c=a.getSymbolRecord(b.name),a=a.evaluate(b.value),{type:"constant",numeric:!0,content:c.value[c.index].content%a.content};case "empty":return{type:"constant",numeric:!1,content:""};case "encode":return{type:"constant",numeric:!1,content:a.encode(a.getValue(b.value))};case "decode":return{type:"constant",numeric:!1,content:a.decode(a.getValue(b.value))}; 56 case "element":return c=a.getValue(b.element),b=a.getSymbolRecord(b.symbol),a=JSON.parse(a.getValue(b.value[b.index]))[c],{type:"constant",numeric:!1,content:"object"===typeof a?JSON.stringify(a):a};case "property":return c=a.getValue(b.property),b=a.getSymbolRecord(b.symbol),a=a.getValue(b.value[b.index]),{type:"constant",numeric:!1,content:"object"===typeof a?a[c]:JSON.parse(a)[c]}}return null},put:function(a,b){a.value[a.index]=b}},condition:{compile:function(a){if(a.tokenIs("not"))return a.next(), 57 {domain:"core",type:"not",value:a.getValue()};try{var c=a.getValue();if("is"===a.getToken()){a.next();var d=b.isNegate(a);if(a.tokenIs("greater")){a.next();if(a.tokenIs("than")){a.next();var e=a.getValue();return{domain:"core",type:"greater",value1:c,value2:e,negate:d}}return null}if(a.tokenIs("less")){a.next();if(a.tokenIs("than")){a.next();var f=a.getValue();return{domain:"core",type:"less",value1:c,value2:f,negate:d}}return null}var g=a.getValue();return{domain:"core",type:"is",value1:c,value2:g, 58 negate:d}}if(c)return{domain:"core",type:"boolean",value:c}}catch(m){console.log(m)}return null},test:function(a,b){switch(b.type){case "boolean":return a.getValue(b.value);case "is":return a=a.compare(a,b.value1,b.value2),b.negate?0!==a:0===a;case "greater":return a=a.compare(a,b.value1,b.value2),b.negate?0>=a:0<a;case "less":return a=a.compare(a,b.value1,b.value2),b.negate?0<=a:0>a;case "not":return!a.getValue(b.value)}}}};f.exports=b},{}],6:[function(d,f,g){var e=this,b=d("./Tokenise"),a=d("./Compile"), 59 c=d("./Run"),k=d("./Value"),h=d("./Condition"),n=d("./Compare"),l={domain:{core:d("./Core")},runtimeError:{runtimeError:function(a,b){e.program.lino=a;throw Error("Line "+(0<=a?a:"")+": "+b);},nonNumericValueError:function(a){runtimeError(a,"Non-numeric value")},variableDoesNotHoldAValueError:function(a,b){runtimeError(a,"Variable '"+b+"' does not hold a value")}},setupTracer:function(){var a=document.getElementById("easycoder-tracer");a&&(a.innerHTML='<div><input id="easycoder-run-button" type="button" value="Run" /><input id="easycoder-step-button" type="button" value="Step" /><div id="easycoder-tracer-content" style="border:1px solid black;padding:4px";width:100%></div>', 60 a.style.display="none")},reportError:function(b,c){if(c){var d=e.program,f=c.tokens;c=c.scriptLines;f=e.compiling?f[a.getIndex()].lino:d.lino;d="";var h=f-5;for(h=0>h?0:h;h<f;h++){for(var k=""+(h+1);4>k.length;)k=" "+k;d+=k+" "+c[h].line.split("\\s").join(" ")+"\n"}d+=b.message+"\n";b=a.getWarnings();if(b.length)for(d+="Warnings:\n",b=$jscomp.makeIterator(b),c=b.next();!c.done;c=b.next())d+=c.value+"\n";console.log(d);alert(d)}else console.log(b.message),alert(b.message)},getSymbolRecord:function(a){a= 61 e.program[e.program.symbols[a].pc];return a.alias?e.program[e.program.symbols[a.alias].pc]:a},evaluate:function(a){return k.evaluate(e.program,a)},encode:function(a){return k.encode(a,e.program.encoding)},decode:function(a){return k.decode(a,e.program.encoding)},getValue:function(a){return k.getValue(e.program,a)},run:function(a){c(e.program,a)},compileScript:function(b){var c=b.tokens;e.compiling=!0;var d=Date.now();a.value=k;a.condition=h;a.domain=l.domain;var f=a.compile(c);e.program=f;var g=Date.now(); 62 console.log("Compiled "+c.length+" tokens in "+(g-d)+"ms");e.compiling=!1;f.source=b;f.run=l.run;f.value=k;f.evaluate=l.evaluate;f.getValue=l.getValue;f.encode=l.encode;f.decode=l.decode;f.condition=h;f.compare=n;f.domain=l.domain;f.getSymbolRecord=l.getSymbolRecord;f.error=l.runtimeError;f.reportError=l.reportError;f.symbols=a.getSymbols();f.encoding="none";f.popups=[];f.stack=[];f.queue=[0];l.setupTracer();console.log("Run the script");f.run(0)},tokeniseScript:function(a){var c=Date.now();a=b.tokenise(a); 63 var d=Date.now();console.log("Tokenised "+a.scriptLines.length+" lines in "+(d-c)+"ms");try{l.compileScript(a)}catch(t){l.reportError(t,a)}},getPlugins:function(a,b,c){var d=l.domain,e=document.head,f=document.createElement("script");f.onload=function(){b.forEach(function(a,b){var c=a;if("http"!==a&&0===a.indexOf("http")){c=a.indexOf("plugin-")+7;var e=a.indexOf(".js");c=a.substring(c,e)}switch(b){case 0:d[c]=EasyCoder_0;break;case 1:d[c]=EasyCoder_1;break;case 2:d[c]=EasyCoder_2;break;case 3:d[c]= 64 EasyCoder_3;break;case 4:d[c]=EasyCoder_4;break;case 5:d[c]=EasyCoder_5;break;case 6:d[c]=EasyCoder_6;break;case 7:d[c]=EasyCoder_7;break;case 8:d[c]=EasyCoder_8;break;case 9:d[c]=EasyCoder_9}});try{l.tokeniseScript(a)}catch(u){l.reportError(u)}};f.src=c?"plugins.js":"/rest//plugins/"+b.join();e.appendChild(f)},start:function(a){var b=!1,c=[],d=[];a.split("\n").forEach(function(a){var e=a.trim().split(" ");"*debug*"===e[0]?(c.length=0,b=!0):2===e.length?"plugin"===e[0]?(a=e[1].trim().split("/").join("~"), 65 c.push(a)):d.push(a):d.push(a)});0===c.length&&(c.push("browser"),c.push("json"),c.push("svg"),b&&c.push("ckeditor"));l.getPlugins(d,c,b)}};f.exports=l},{"./Compare":2,"./Compile":3,"./Condition":4,"./Core":5,"./Run":7,"./Tokenise":8,"./Value":9}],7:[function(d,f,g){var e=function(b,a){var c=function(a){var b=9999;a.forEach(function(a){a=a.line;for(var c=0;c<a.length&&" "===a[c];)c++;0<c&&c<b&&(b=c)});return 0},d=[];if(d.length)d.push(a);else for(d.push(a);0<d.length;)for(b.pc=d.shift(),a={};;){b.pc= 66 b.domain[b[b.pc].domain].run(b);if(!b.pc)break;if(b.stop){b.tracing=!1;return}if(b.tracing){var f=b[b.pc],g=b.source.scriptLines,l=c(g),m=document.getElementById("easycoder-tracer");if(m){m.style.display="block";m.style.visibility="visible";var p="";if(b.tracer){b.tracer.variables.forEach(function(a,c,d){var e=b.getSymbolRecord(a);p=(e=e.value[e.index])?p+(a+": "+e.content):p+(a+": undefined");switch(b.tracer.alignment){case "horizontal":c<d.length-1&&(p+=", ");break;case "vertical":p+="<br>"}}); 67 p+="<hr>";m="";for(var q=5;0<q;q--)f.lino&&(m+='<input type="text" name="'+q+'" value="'+g[f.lino-q].line.substr(l)+'"style=width:100%;border:none;enabled="false">'),m+="<br>";f=document.getElementById("easycoder-tracer-content");f.innerHTML=p+m;f.style.display="block";a.run=document.getElementById("easycoder-run-button");a.step=document.getElementById("easycoder-step-button");a.run.onclick=function(a){return function(c){a.run.blur();b.tracing=!1;document.getElementById("easycoder-tracer-content").style.display= 68 "none";try{e(b,b.resume)}catch(r){c="Error in run handler: "+r.message,console.log(c),alert(c)}}}(a);a.step.onclick=function(a){return function(c){console.log("step");a.step.blur();b.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{e(b,b.resume)}catch(r){c="Error in step handler: "+r.message,console.log(c),alert(c)}}}(a);b.resume=b.pc;b.pc=0}}break}a={run:a.run,step:a.step}}};f.exports=e},{}],8:[function(d,f,g){var e={markComments:function(b){var a=b.list,c= 69 void 0===b.index?0:b.index,d=void 0===b.inComment?!1:b.inComment,f=void 0===b.newList?[]:b.newList;if(c>=a.length)return f;var g=a[c];b=g.lino;g=g.token;var l={list:a,index:c+1,inComment:!1,newList:f.concat({lino:b,index:c,token:g})};f={list:a,index:c+1,inComment:!0,newList:f.concat({lino:b,index:c,comment:!0,token:g})};return d&&0<c&&b===a[c-1].lino?e.markComments(f):"!"===g.charAt(0)?e.markComments(f):e.markComments(l)},findStrings:function(b){var a=b.original,c=b.line,d=void 0===b.inComment?!1: 70 b.inComment;b=void 0===b.inQuote?!1:b.inQuote;var f=c.charAt(0),g=b&&" "===f?"\\s":f;if(1===c.length)return g;c=c.substring(1);if("!"===f&&!b)return f+e.findStrings({original:a,line:c,inComment:!0,inQuote:!1});if("`"===f&&!d&&!b)return f+e.findStrings({original:a,line:c,inComment:d,inQuote:!0});if("`"===f&&b)return f+e.findStrings({original:a,line:c,inComment:d,inQuote:!1});if(!d&&!b&&!f.match(/[A-z0-9_\-\+\*\/\- ]/)){if("'"==f||'"'==f)throw Error('Bad syntax in "'+a+'":\nStrings in EasyCoder must be enclosed in backticks.'); 71 throw Error('Unrecognised character "'+f+'" in "'+a+'".');}return g+e.findStrings({original:a,line:c,inComment:d,inQuote:b})},tokenise:function(b){b=b.map(function(a){return a.length?e.findStrings({original:a,line:a}):""}).map(function(a,b){return{lino:b+1,line:a}});var a=b.map(function(a){return a.line.trim().split(/\s+/).map(function(b,c){return{lino:a.lino,index:c,token:b}})});a=[].concat.apply([],a).filter(function(a){return a.token}).map(function(a){return{lino:a.lino,index:a.index,token:a.token.split("\\s").join(" ")}}); 72 a=e.markComments({list:a}).filter(function(a){return!a.comment});return{scriptLines:b,tokens:a}}};f.exports=e},{}],9:[function(d,f,g){var e={getItem:function(b){var a=b.getToken();if(!a)return null;if("`"===a.charAt(0))return b.next(),{type:"constant",numeric:!1,content:a.substring(1,a.length-1)};if(a[0].match(/[0-9\-]/)){var c=eval(a);if(Number.isInteger(c))return b.next(),{type:"constant",numeric:!0,content:c};throw Error("'"+a+"' is not an integer");}b.mark();a=$jscomp.makeIterator(Object.keys(b.domain)); 73 for(c=a.next();!c.done;c=a.next())if(c=b.domain[c.value].value.compile(b))return c;return null},compile:function(b){var a=b.getToken(),c=b.value.getItem(b);if(!c)throw Error("Undefined value: '"+a+"'");if("cat"===b.getToken()){for(a={type:"cat",numeric:!1,parts:[c]};b.tokenIs("cat");)b.next(),a.parts.push(b.value.getItem(b));return a}return c},doValue:function(b,a){if("cat"===a.type)return{type:"constant",numeric:!1,content:a.parts.reduce(function(a,c){return a+e.doValue(b,c).content},"")};switch(a.type){case "constant":return a; 74 case "symbol":var c=b.getSymbolRecord(a.name);return c.isValueHolder?c.value[c.index]?c.value[c.index]:null:b.domain[c.domain].value.get(b,a);case "boolean":return a}return b.domain[a.domain].value.get(b,a)},constant:function(b){return{type:"constant",numeric:"false",content:b}},evaluate:function(b,a){if(!a)return{type:"constant",numeric:!1,content:""};var c=e.doValue(b,a);if(c)return c;b.error.runtimeError(b[b.pc].lino,"Can't decode value: "+a)},getValue:function(b,a){return e.evaluate(b,a).content}, 75 encode:function(b,a){switch(a){case "url":return encodeURIComponent(b.replace(/\s/g,"+"));default:return b}},decode:function(b,a){switch(a){case "url":return decodeURIComponent(b).replace(/\+/g," ");default:return b}}};f.exports=e},{}]},{},[1]); -
easycoder/trunk/easycoder.js
r1963126 r1963561 204 204 const item = EasyCoder_Compiler.getTokens()[EasyCoder_Compiler.getIndex()]; 205 205 if (_this.symbols[item.token]) { 206 EasyCoder_Compiler.error.duplicateSymbolError(item.token);206 throw new Error(`Duplicate variable name '${item.token}'`); 207 207 } 208 208 const pc = EasyCoder_Compiler.getPc(); … … 246 246 } 247 247 console.log('No handler found'); 248 EasyCoder_Compiler.error.dontUnderstandError(token, index);248 throw new Error(`I don't understand '${token}'`); 249 249 }, 250 250 … … 575 575 return true; 576 576 } 577 compiler.error.NoSuchVariableError(compiler.getToken());577 throw new Error(`No such variable: '${compiler.getToken()}'`); 578 578 }, 579 579 … … 1142 1142 return true; 1143 1143 } 1144 compiler.error.noSuchVariableError(compiler.getToken());1144 throw new Error(`No such variable: '${compiler.getToken()}'`); 1145 1145 } 1146 1146 return false; … … 1282 1282 const target = compiler.getTarget(); 1283 1283 if (!compiler.isSymbol()) { 1284 compiler.error.unknownVariableError(compiler.getToken());1284 throw new Error(`Unknown variable '${compiler.getToken()}'`); 1285 1285 } 1286 1286 const symbol = compiler.getToken(); … … 2157 2157 }, 2158 2158 2159 compileError: {2160 dontUnderstandError: name => {2161 throw Error('I don\'t understand \'' + name + '\'');2162 },2163 duplicateSymbolError: name => {2164 throw Error('Symbol \'' + name + '\' is a duplicate');2165 },2166 inappropriateTypeError: name => {2167 throw Error('Inappropriate type \'' + name + '\'');2168 },2169 inappropriateVariableTypeError: name => {2170 throw Error('Inappropriate variable type \'' + name + '\'');2171 },2172 missingInputTypeError: () => {2173 throw Error('Missing input type');2174 },2175 noSuchVariableError: name => {2176 throw Error('No such variable: ' + name);2177 },2178 notAnIntegerError: name => {2179 throw Error('Value is not an integer: ' + name);2180 },2181 undefinedValueError: name => {2182 throw Error('Undefined value: ' + name);2183 },2184 unknownTypeError: name => {2185 throw Error('Unknown type: ' + name);2186 },2187 unknownVariableError: name => {2188 throw Error('Unknown variable: ' + name);2189 },2190 unrecognisedValueError: name => {2191 throw Error('I don\'t understand this value: ' + name);2192 },2193 variableDoesNotHoldAValueError: name => {2194 throw Error('Variable \'' + name + '\' does not hold a value');2195 },2196 expectedError: (expected, actual) => {2197 throw Error('Expected \'' + expected + '\' but saw \'' + actual + '\'');2198 },2199 symbolExpectedError: actual => {2200 throw Error('Symbol expected: got ' + actual);2201 }2202 },2203 2204 2159 runtimeError: { 2205 2160 runtimeError: (lino, message) => { 2206 throw Error('Line ' + (lino >= 0) ? lino + 1 + ': ' : '' + message); 2161 _this.program.lino = lino; 2162 throw Error(`Line ${lino >= 0 ? lino : ''}: ${message}`); 2207 2163 }, 2208 2164 nonNumericValueError: lino => { … … 2210 2166 }, 2211 2167 variableDoesNotHoldAValueError: (lino, name) => { 2212 runtimeError(lino, 'Variable \'' + name + '\' does not hold a value');2168 runtimeError(lino, `Variable '${name}' does not hold a value`); 2213 2169 } 2214 2170 }, … … 2226 2182 reportError: (err, source) => { 2227 2183 if (!source) { 2228 console.log(err );2229 alert(err );2184 console.log(err.message); 2185 alert(err.message); 2230 2186 return; 2231 2187 } 2232 2188 const compiler = EasyCoder_Compiler; 2233 const program = compiler.getProgram();2189 const program = _this.program; 2234 2190 const { tokens, scriptLines } = source; 2235 const lino = _this.compiling ? tokens[compiler.getIndex()].lino : program. pc.lino;2191 const lino = _this.compiling ? tokens[compiler.getIndex()].lino : program.lino; 2236 2192 var errString = ''; 2237 2193 let start = lino - 5; 2238 2194 start = start < 0 ? 0 : start; 2239 2195 for (var n = start; n < lino; n++) { 2240 let nn = '' + n;2196 let nn = '' + (n + 1); 2241 2197 while (nn.length < 4) { 2242 2198 nn = ' ' + nn; … … 2244 2200 errString += nn + ' ' + scriptLines[n].line.split('\\s').join(' ') + '\n'; 2245 2201 } 2246 errString += err.message + '\n';2202 errString += `${err.message}\n`; 2247 2203 const warnings = EasyCoder_Compiler.getWarnings(); 2248 2204 if (warnings.length) { 2249 2205 errString += 'Warnings:\n'; 2250 2206 for (const warning of warnings) { 2251 errString += warning + '\n';2207 errString += `${warning}\n`; 2252 2208 } 2253 2209 } … … 2293 2249 compiler.condition = EasyCoder_Condition; 2294 2250 compiler.domain = EasyCoder.domain; 2295 compiler.error = EasyCoder.compileError;2296 2251 const program = EasyCoder_Compiler.compile(tokens); 2297 2252 _this.program = program; … … 2332 2287 console.log('Tokenised ' + source.scriptLines.length + ' lines in ' + (finishTokenise - startTokenise) + 'ms'); 2333 2288 // console.log('Source: ' + JSON.stringify(source, null, 2)); 2334 EasyCoder.compileScript(source); 2289 try { 2290 EasyCoder.compileScript(source); 2291 } catch (err) { 2292 EasyCoder.reportError(err, source); 2293 } 2335 2294 }, 2336 2295 … … 2716 2675 return value; 2717 2676 } else { 2718 compiler.error.notAnIntegerError(token);2677 throw new Error(`'${token}' is not an integer`); 2719 2678 } 2720 2679 } … … 2736 2695 const item = compiler.value.getItem(compiler); 2737 2696 if (!item) { 2738 compiler.error.undefinedValueError(token);2697 throw new Error(`Undefined value: '${token}'`); 2739 2698 } 2740 2699 -
easycoder/trunk/easycoder.php
r1963126 r1963561 4 4 * Plugin URI: https://easycoder.software 5 5 * Description: Control the appearance and behavior of your posts and pages by embedding simple English-like scripts, without the need to learn JavaScript. 6 * Version: 2.1. 16 * Version: 2.1.2 7 7 * Author: EasyCoder Software 8 8 * Author URI: https://easycoder.software … … 62 62 function easycoder_enqueue_script() { 63 63 wp_enqueue_script('easycoder_script', 64 plugin_dir_url( __FILE__ ) . 'easycoder-min.js', array(), '2.1. 1');64 plugin_dir_url( __FILE__ ) . 'easycoder-min.js', array(), '2.1.2'); 65 65 } 66 66 -
easycoder/trunk/plugin-browser.js
r1963126 r1963561 185 185 compiler.next(); 186 186 } else { 187 compiler.error.missingInputTypeError();187 throw new Error('Missing input type'); 188 188 } 189 189 } … … 193 193 const parentRecord = compiler.getSymbolRecord(); 194 194 if (parentRecord.extra !== 'dom') { 195 compiler.error.inappropriateTypeError(parentRecord.keyword);195 throw new Error(`Inappropriate type '${parentRecord.keyword}'`); 196 196 } 197 197 compiler.next(); … … 734 734 } 735 735 } 736 compiler.error.symbolExpectedError(compiler.getToken());736 throw new Error(`Expected a symbol at '{compiler.getToken()}'`); 737 737 } 738 738 } else if (token === 'text') { … … 1219 1219 }; 1220 1220 } 1221 compiler.error.symbolExpectedError(compiler.getToken());1221 throw new Error(`Expected a symbol at '{compiler.getToken()}'`); 1222 1222 } 1223 1223 return null; -
easycoder/trunk/plugin-json.js
r1963126 r1963561 38 38 } 39 39 } 40 } 41 compiler.error.expectedError('of', compiler.getToken());40 } 41 throw new Error(`Expected '${'of'}' but saw '${compiler.getToken()}`); 42 42 } else if (compiler.tokenIs('element')) { 43 43 compiler.next(); … … 69 69 } 70 70 } 71 compiler.error.expectedError('of', compiler.getToken());71 throw new Error(`Expected '${'of'}' but saw '${compiler.getToken()}`); 72 72 } 73 73 break; … … 308 308 break; 309 309 } 310 } 311 const url = compiler.getValue(); 312 if (compiler.tokenIs('as')) { 313 compiler.next(); 310 314 name = compiler.getValue(); 311 if (compiler.tokenIs('at')) { 312 compiler.next(); 313 } else { 314 break; 315 } 316 } 317 const url = compiler.getValue(); 318 compiler.addCommand({ 315 } 316 compiler.addCommand({ 319 317 domain: 'json', 320 318 keyword: 'rest', … … 355 353 break; 356 354 default: 357 const lino = command.lino + 1;358 355 const error = JSON.parse(this.responseText ? this.responseText : '{}'); 359 alert(`HTTP error ${this.status} at line ${lino}:\n${error.message}`); 356 try { 357 program.error.runtimeError(command.lino, error.message); 358 // `HTTP error ${this.status} at line ${command.lino}:\n${error.message}`); 359 } catch (err) { 360 program.reportError(err, program.source); 361 } 360 362 break; 361 363 } -
easycoder/trunk/plugin-svg.js
r1960099 r1963561 28 28 break; 29 29 default: 30 compile.error.InappropriateVariableTypeError(symbol.keyword);30 throw new Error(`Inappropriate variable type: '${symbol.keyword}'`); 31 31 break; 32 32 } … … 121 121 const parentRecord = compiler.getSymbolRecord(); 122 122 if (!['svg', 'group'].includes(parentRecord.keyword)) { 123 compiler.error.inappropriateTypeError(parentRecord.keyword);123 throw new Error(`Inappropriate type '${parentRecord.keyword}'`); 124 124 } 125 125 compiler.next(); … … 146 146 const parentRecord = compiler.getSymbolRecord(); 147 147 if (!['svg', 'group'].includes(parentRecord.keyword)) { 148 compiler.error.inappropriateTypeError(parentRecord.keyword);148 throw new Error(`Inappropriate type '${parentRecord.keyword}'`); 149 149 } 150 150 compiler.next(); … … 478 478 program.run(event.target.targetPc); 479 479 } catch (err) { 480 program.reportError( program.source, err);480 program.reportError(err, program.source); 481 481 } 482 482 return false; -
easycoder/trunk/readme.txt
r1963126 r1963561 47 47 == Changelog == 48 48 49 = 2.1.2 26-oct-2018 = 50 * Better error handling and reporting. 51 49 52 = 2.1.1 25-oct-2018 = 50 53 * Added some more REST functions and a REST server.
Note: See TracChangeset
for help on using the changeset viewer.