Changeset 1996019
- Timestamp:
- 12/16/2018 10:53:13 PM (7 years ago)
- Location:
- easycoder/trunk
- Files:
-
- 9 edited
-
easycoder-min.js (modified) (2 diffs)
-
easycoder.js (modified) (16 diffs)
-
easycoder.php (modified) (2 diffs)
-
plugins-sample.js (modified) (1 diff)
-
plugins/browser.js (modified) (28 diffs)
-
plugins/json.js (modified) (1 diff)
-
plugins/svg.js (modified) (15 diffs)
-
readme.txt (modified) (1 diff)
-
rest.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
easycoder/trunk/easycoder-min.js
r1990067 r1996019 9 9 $jscomp.polyfill("Array.prototype.includes",function(d){return d?d:function(d,f){var e=this;e instanceof String&&(e=String(e));var b=e.length;f=f||0;for(0>f&&(f=Math.max(f+b,0));f<b;f++){var a=e[f];if(a===d||Object.is(a,d))return!0}return!1}},"es7","es3");$jscomp.polyfill("String.prototype.includes",function(d){return d?d:function(d,f){return-1!==$jscomp.checkStringArgs(this,d,"includes").indexOf(d,f||0)}},"es6","es3"); 10 10 $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");$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"); 11 (function(){function d(g,f,e){function b(c,h){if(!f[c]){if(!g[c]){var m="function"==typeof require&&require;if(!h&&m)return m(c,!0);if(a)return a(c,!0);h=Error("Cannot find module '"+c+"'");throw h.code="MODULE_NOT_FOUND",h;}h=f[c]={exports:{}};g[c][0].call(h.exports,function(a){return b(g[c][1][a]||a)},h,h.exports,d,g,f,e)}return f[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,g,f){var e=d("./easycoder/Main"); console.log("Starting up EasyCoder...");12 window.onload=function(){window.EasyCoder=e;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,g,f){g.exports=function(d,b,a){b=d.value.evaluate(d,b);a=d.value.evaluate(d,a);b.numeric!==a.numeric&&d.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,g,f){var e=Object.assign||function(a){for(var c=1;c<arguments.length;c++){var b= 13 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)},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+1].token},getToken:function(){return b.index>= 14 b.tokens.length?null:b.tokens[b.index]?b.tokens[b.index].token:null},nextToken:function(){a.next();return a.getToken()},tokenIs:function(a){return b.index>=b.tokens.length?!1:a===b.tokens[b.index].token},nextTokenIs:function(c){a.next();return a.tokenIs(c)},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},getTarget:function(a){a=void 0===a?b.index:a;return b.tokens[a].token}, 15 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},nextIsSymbol:function(){a.next();return a.isSymbol()},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},16 get Value:function(){return a.value.compile(a)},getNextValue:function(){a.next();return a.getValue()},getCondition:function(){return a.condition.compile(a)},constant:function(c,b){return a.value.constant(c,void 0===b?!1:b)},addCommand:function(a){b.program.push(e({pc:b.program.length},a))},addSymbol:function(a,m){b.symbols[a]={pc:m}},mark:function(){b.savedMark=b.index},rewind:function(){b.index=b.savedMark},compileVariable:function(c,m,h,d){h=void 0===h?!1:h;d=void 0===d?null:d;a.next();var k=a.getLino(),17 n=a.getTokens()[a.getIndex()];if(b.symbols[n.token])throw Error("Duplicate variable name '"+n.token+"'");var p=a.getPc();a.next();a.addSymbol(n.token,p);c={domain:c,keyword:m,lino:k,isSymbol:!0,isValueHolder:h,name:n.token,elements:1,index:0,value:[{}],extra:d};a.addCommand(c);return c},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; 18 a.rewind()}console.log("No handler found");throw Error("I don't understand '"+c+"...'");}},compileOne:function(){var c=a.getToken();if(c){b.warnings=[];var m=b.program.length;c.endsWith(":")?(b.symbols[c.substring(0,c.length-1)]={pc:m},b.index++):a.compileToken()}},compileFromHere:function(c){for(;b.index<b.tokens.length;){var m=b.tokens[b.index].token;if("else"===m)return b.program;a.compileOne();if(-1<c.indexOf(m))break}},compile:function(c){b.tokens=c;b.index=0;b.program=[];b.symbols={};b.warnings= 19 [];a.compileFromHere([]);a.addCommand({domain:"core",keyword:"stop",lino:a.getLino(),next:0});return b.program}};g.exports=a},{}],4:[function(d,g,f){var e=Object.assign||function(b){for(var a=1;a<arguments.length;a++){var c=arguments[a],m;for(m in c)Object.prototype.hasOwnProperty.call(c,m)&&(b[m]=c[m])}return b};g.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},20 c );b.rewind()}},test:function(b,a){return b.domain[a.domain].condition.test(b,a)}}},{}],5:[function(d,g,f){var e=this,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",21 keyword:"add",lino:c,value1:b, target:h});return!0}a.warning("core "+e.name+": Expected value holder")}else{h=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",22 numeric:!0,content:a}):(e.numeric||a.nonNumericValueError(c.lino),a=e.content+a.getValue(b),d.value[d.index]={type:"constant",numeric:!0,content:a})}else a.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= 23 a[a.pc],b=a.symbols[c.alias].pc,d=a[b],k=a.getSymbolRecord(c.symbol);a[b]={pc:d.pc,domain:k.domain,keyword:k.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); 24 b.isValueHolder?(a.domain[b.domain].value.put(b,{type:"boolean",content:!1}),c.numeric=!1):a.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Debug:{compile:function(a){var c=a.getLino();if(a.nextTokenIs("program")){a.next();if(["item","pc"].includes(a.getToken())){var b=a.getNextValue();a.addCommand({domain:"core",keyword:"debug",lino:c,item:b});return!0}a.addCommand({domain:"core",keyword:"debug",lino:c,item:-1});return!0}return a.tokenIs("symbols")?(a.next(),a.addCommand({domain:"core",25 keyword:"debug",lino:c,item:"symbols"}),!0):a.tokenIs("symbol")?(b=a.nextToken(),a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbol",name:b}),!0):a.tokenIs("step")?(a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"step"}),!0):!1},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":a=a.getSymbolRecord(c.name);b=a.exporter;delete a.exporter;console.log("Symbol: "+JSON.stringify(a, 26 null,2));a.exporter=b;break;case "step":a.debugStep=!0;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=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.index]); 27 b.value[b.index]={type:"constant",numeric:!1,content:a.decode(d)};c.numeric=!1}else a.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=a.getValue();a.tokenIs("by")&&a.next();var k=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, 28 value1:b,value2:k,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:k,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,k=a.getSymbolRecord(c.target);if(k.isValueHolder){var e=k.value[k.index];b?(a=a.getValue(b)/a.getValue(d),k.value[k.index]={type:"constant",numeric:!0,content:Math.trunc(a)}):(e.numeric||a.nonNumericValueError(c,29 l ino),a=e.content/a.getValue(d),k.value[k.index]={type:"constant",numeric:!0,content:Math.trunc(a)})}else a.VariableDoesNotHoldAValueError(c.lino,k.name);return c.pc+1}},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.index]);b.value[b.index]={type:"constant",30 numeric:!1,content:a.encode(d)};c.numeric=!1}else a.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();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(m){console.log(m.message),alert(m.message)}return c.pc+1}},Go:{compile:function(a){var c= 31 a .getLino();a.next();a.tokenIs("to")&&a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"go",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];if(c.label){var b=a.symbols[c.label];if(b)return b.pc;a.runtimeError(c.lino,"Unknown symbol '"+c.label+"'")}return c.goto}},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];32 a.stack.push(a.pc+1);return a.symbols[c.label].pc}},If:{compile:function(a){var c=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=33 a [a.pc];return a.condition.test(a,c.condition)?c.pc+1:c.else}},Import:{compile:function(a){a.getLino();var c=a.imports,b=a.getProgram();c=$jscomp.makeIterator(c);for(var d=c.next();!d.done;d=c.next()){d=d.value;a.next();var k=a.getToken(),e=d.keyword;if(k===e){if(k=a.compileVariable(d.domain,e,!0),k=b[a.getSymbols()[k.name].pc],k.exporter=d.exporter,k.exportedName=d.name,k.imported=!0,!a.tokenIs("and"))break}else throw Error("Mismatched import variable type for '"+d.name+"'");}return!0},run:function(a){return a[a.pc].pc+34 1}},Index:{compile:function(a){var c=a.getLino();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),d=a.getValue(c.value);d>=b.elements&&a.runtimeError(c.lino,"Array index "+d+" is out of range for '"+b.name+"'");b.index=d;b.imported&&(b.exporter.getSymbolRecord(b.exportedName).index=d);return c.pc+ 35 1}},Load:{compile:function(a){var c=a.getLino();a.next();if(a.tokenIs("plugin")){a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"load",lino:c,name:b});return!0}},run:function(a){var c=a[a.pc],b=a.getValue(c.name);if(a.checkPlugin(b))return c.pc+1;EasyCoder_Plugins.getLocalPlugin(a.getPluginsPath,b,a.getPlugin,a.addLocalPlugin,function(){a.run(c.pc+1)});return 0}},Module:{compile:function(a){a.compileVariable("core","module");return!0},run:function(a){a=a[a.pc];a.program=null;return a.pc+ 36 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=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"),11 (function(){function d(g,f,e){function b(c,h){if(!f[c]){if(!g[c]){var m="function"==typeof require&&require;if(!h&&m)return m(c,!0);if(a)return a(c,!0);h=Error("Cannot find module '"+c+"'");throw h.code="MODULE_NOT_FOUND",h;}h=f[c]={exports:{}};g[c][0].call(h.exports,function(a){return b(g[c][1][a]||a)},h,h.exports,d,g,f,e)}return f[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,g,f){var e=d("./easycoder/Main");e.timestamp= 12 Date.now();console.log("Starting up EasyCoder...");window.onload=function(){window.EasyCoder=e;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,g,f){g.exports=function(d,b,a){b=d.value.evaluate(d,b);a=d.value.evaluate(d,a);b.numeric!==a.numeric&&d.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,g,f){var e=Object.assign|| 13 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)},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+ 14 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()},tokenIs:function(a){return b.index>=b.tokens.length?!1:a===b.tokens[b.index].token},nextTokenIs:function(c){a.next();return a.tokenIs(c)},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},getTarget:function(a){a= 15 void 0===a?b.index:a;return b.tokens[a].token},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},nextIsSymbol:function(){a.next();return a.isSymbol()},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}, 16 getPc:function(){return b.program.length},getValue:function(){return a.value.compile(a)},getNextValue:function(){a.next();return a.getValue()},getCondition:function(){return a.condition.compile(a)},constant:function(c,b){return a.value.constant(c,void 0===b?!1:b)},addCommand:function(a){b.program.push(e({pc:b.program.length},a))},addSymbol:function(a,m){b.symbols[a]={pc:m}},mark:function(){b.savedMark=b.index},rewind:function(){b.index=b.savedMark},compileVariable:function(c,m,h,d){h=void 0===h?!1: 17 h;d=void 0===d?null:d;a.next();var l=a.getLino(),n=a.getTokens()[a.getIndex()];if(b.symbols[n.token])throw Error("Duplicate variable name '"+n.token+"'");var p=a.getPc();a.next();a.addSymbol(n.token,p);c={domain:c,keyword:m,lino:l,isSymbol:!0,isValueHolder:h,name:n.token,elements:1,index:0,value:[{}],element:[],extra:d};"dom"===d&&(c.element=[]);a.addCommand(c);return c},compileToken:function(){var c=a.getToken();if(c){a.getIndex();a.mark();for(var b=$jscomp.makeIterator(Object.keys(a.domain)),h= 18 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=a.getToken();if(c){b.warnings=[];var m=b.program.length;c.endsWith(":")?(b.symbols[c.substring(0,c.length-1)]={pc:m},b.index++):a.compileToken()}},compileFromHere:function(c){for(;b.index<b.tokens.length;){var m=b.tokens[b.index].token;if("else"===m)return b.program;a.compileOne();if(-1< 19 c.indexOf(m))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}};g.exports=a},{}],4:[function(d,g,f){var e=Object.assign||function(b){for(var a=1;a<arguments.length;a++){var c=arguments[a],m;for(m in c)Object.prototype.hasOwnProperty.call(c,m)&&(b[m]=c[m])}return b};g.exports={compile:function(b){b.mark();for(var a=$jscomp.makeIterator(Object.keys(b.domain)), 20 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,g,f){var e=this,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", 21 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=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); 22 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.nonNumericValueError(c.lino),a=e.content+a.getValue(b),d.value[d.index]={type:"constant",numeric:!0,content:a})}else a.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", 23 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],l=a.getSymbolRecord(c.symbol);a[b]={pc:d.pc,domain:l.domain,keyword:l.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", 24 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.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Debug:{compile:function(a){var c=a.getLino();if(a.nextTokenIs("program")){a.next();if(["item","pc"].includes(a.getToken())){var b=a.getNextValue();a.addCommand({domain:"core",keyword:"debug",lino:c,item:b});return!0}a.addCommand({domain:"core",keyword:"debug", 25 lino:c,item:-1});return!0}return a.tokenIs("symbols")?(a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbols"}),!0):a.tokenIs("symbol")?(b=a.nextToken(),a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"symbol",name:b}),!0):a.tokenIs("step")?(a.next(),a.addCommand({domain:"core",keyword:"debug",lino:c,item:"step"}),!0):!1},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":a= 26 a.getSymbolRecord(c.name);b=a.exporter;delete a.exporter;console.log("Symbol: "+JSON.stringify(a,null,2));a.exporter=b;break;case "step":a.debugStep=!0;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=a.getToken();a.next();a.addCommand({domain:"core",keyword:"decode",lino:c,symbol:b});return!0}return!1}, 27 run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.symbol);if(b.isValueHolder){var d=a.getValue(b.value[b.index]);b.value[b.index]={type:"constant",numeric:!1,content:a.decode(d)};c.numeric=!1}else a.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=a.getValue();a.tokenIs("by")&&a.next();var l=a.getValue();if(a.tokenIs("giving")){a.next();if(a.isSymbol())return d= 28 a.getSymbol(),d=a.getCommandAt(d.pc).name,a.next(),a.addCommand({domain:"core",keyword:"divide",lino:c,value1:b,value2:l,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:l,target:d}),!0;return!1},run:function(a){var c=a[a.pc],b=c.value1,d=c.value2,l=a.getSymbolRecord(c.target);if(l.isValueHolder){var e=l.value[l.index];b?(a=a.getValue(b)/a.getValue(d), 29 l.value[l.index]={type:"constant",numeric:!0,content:Math.trunc(a)}):(e.numeric||a.nonNumericValueError(c,lino),a=e.content/a.getValue(d),l.value[l.index]={type:"constant",numeric:!0,content:Math.trunc(a)})}else a.VariableDoesNotHoldAValueError(c.lino,l.name);return c.pc+1}},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); 30 if(b.isValueHolder){var d=a.getValue(b.value[b.index]);b.value[b.index]={type:"constant",numeric:!1,content:a.encode(d)};c.numeric=!1}else a.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();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(m){console.log(m.message), 31 alert(m.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:"go",lino:c,label:b});return!0},run:function(a){var c=a[a.pc];if(c.label){var b=a.symbols[c.label];if(b)return b.pc;a.runtimeError(c.lino,"Unknown symbol '"+c.label+"'")}return c.goto}},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", 32 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}},If:{compile:function(a){var c=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= 33 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}},Import:{compile:function(a){a.getLino();var c=a.imports,b=a.getProgram();c=$jscomp.makeIterator(c);for(var d=c.next();!d.done;d=c.next()){d=d.value;var l=a.nextToken(),e=d.keyword;if(l===e){if(l=a.compileVariable(d.domain,e,!0),l=b[a.getSymbols()[l.name].pc],l.exporter=d.exporter,l.exportedName=d.name,l.extra=d.extra,l.imported=!0,!a.tokenIs("and"))break}else throw Error("Mismatched import variable type for '"+ 34 d.name+"'");}return!0},run:function(a){return a[a.pc].pc+1}},Index:{compile:function(a){var c=a.getLino();if(a.nextIsSymbol()){var b=a.getToken();if(a.nextTokenIs("to")){var d=a.getNextValue();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),d=a.getValue(c.value);d>=b.elements&&a.runtimeError(c.lino,"Array index "+d+" is out of range for '"+b.name+"'");b.index=d;b.imported&&(b.exporter.getSymbolRecord(b.exportedName).index= 35 d);return c.pc+1}},Load:{compile:function(a){var c=a.getLino();a.next();if(a.tokenIs("plugin")){a.next();var b=a.getValue();a.addCommand({domain:"core",keyword:"load",lino:c,name:b});return!0}},run:function(a){var c=a[a.pc],b=a.getValue(c.name);if(a.checkPlugin(b))return c.pc+1;EasyCoder_Plugins.getLocalPlugin(a.getPluginsPath,b,a.getPlugin,a.addLocalPlugin,function(){a.run(c.pc+1)});return 0}},Module:{compile:function(a){a.compileVariable("core","module");return!0},run:function(a){a=a[a.pc];a.program= 36 null;return a.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=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"), 37 37 a.addCommand({domain:"core",keyword:"multiply",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.nonNumericValueError(c,lino),a=f.content*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Negate:{compile:function(a){var c= 38 38 a.getLino();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.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},On:{compile:function(a){var c=a.getLino();a.next();if(a.tokenIs("trigger")){a.next();a.addCommand({domain:"core",keyword:"on",lino:c, … … 40 40 value:b});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}a.warning("core:put: No such variable: '"+a.getToken()+"'")}return!1},run:function(a){var c=a[a.pc],b=a.getSymbolRecord(c.target);b.isValueHolder||a.variableDoesNotHoldAValueError(c.lino, 41 41 b.name);a=a.evaluate(c.value);b.value[b.index]=a;b.imported&&(b=b.exporter.getSymbolRecord(b.exportedName),b.value[b.index]=a);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= 42 a[a.pc],b=a.getValue(c.original).split("\\r").join("\r").split("\\n").join("\n"),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]={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()}},Run:{compile:function(a){var c=a.getLino() ;a.next();var b=a.getValue(),d=[];if(a.tokenIs("with"))for(;;)if(a.next(),43 a. isSymbol()){var e=a.getSymbolRecord();e.exporter=a.getProgram();d.push(e);a.next();if(!a.tokenIs("and"))break}if(a.tokenIs("as")&&(a.next(),a.isSymbol()&&(e=a.getSymbolRecord(),a.next(),"module"===e.keyword)))var f=e.name;a.addCommand({domain:"core",keyword:"run",lino:c,script:b,imports:d,module:f});return!0},run:function(a){a.runScript(a);return 0<a.pc?a[a.pc].pc+1:0}},Script:{compile:function(a){var c=a.getLino();a.next();var b=a.getToken();a.next();a.addCommand({domain:"core",keyword:"script",44 lino:c,name:b});return!0},run:function(a){var c=a[a.pc];a.script=c.name;return c.pc+1}},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(k){a.rewind();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}); 45 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",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}), 46 !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.VariableDoesNotHoldAValueError(c.lino,b.name);break;case "setElements":b=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; 47 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"===a.peek()){d=a.getValue();a.next();var f=a.getToken();a.next(); 48 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},run:function(a){var c=a[a.pc],b=c.value1,49 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.nonNumericValueError(c,lino),a=a.getValue(f)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Toggle:{compile:function(a){var c=a.getLino();a.next();if(a.isSymbol()){var b=a.getSymbolPc();a.next();a.addCommand({domain:"core",50 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.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Trigger:{compile:function(a){var c=a.getLino();a.next();return a.tokenIs("parent")?(a.next(),a.addCommand({domain:"core",keyword:"trigger",lino:c,module:"parent"}),!0):a.isSymbol()&&(moduleRecord=a.getSymbolRecord(),51 a.next(),"module"===moduleRecord.keyword)?(g=moduleRecord.name,a.addCommand({domain:"core",keyword:"trigger",lino:c,module:g}),!0):!1},run:function(a){var c=a[a.pc];"parent"===c.module?a.parent&&a.parent.trigger(!0):(a=a.getSymbolRecord(c.module),a.exporter?(exporterRecord=a.exporter.getSymbolRecord(c.module),exporterRecord.program.trigger()):a.program.trigger());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= 52 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();53 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;54 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":case "goto":return b.Go;case "gosub":return b.Gosub;case "if":return b.If;case "import":return b.Import;case "index":return b.Index;case "load":return b.Load;case "module":return b.Module;case "multiply":return b.Multiply;case "negate":return b.Negate;case "on":return b.On;case "print":return b.Print;case "put":return b.Put;case "replace":return b.Replace;55 case " return":return b.Return;case "run":return b.Run;case "script":return b.Script;case "set":return b.Set;case "stop":return b.Stop;case "take":return b.Take;case "toggle":return b.Toggle;case "trigger":return b.Trigger;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.runtimeError(c.lino,"Unknown keyword '"+c.keyword+"' in 'core' package");return d.run(a)},isNegate:function(a){return"not"===56 a.getToken() ?(a.next(),!0):!1},value:{compile:function(a){if(a.isSymbol()){var c=a.getToken();switch(a.getSymbolRecord().keyword){case "module":return a.next(),{domain:"core",type:"module",name:c};case "variable":return a.nextTokenIs("modulo")?(a=a.getNextValue(),{domain:"core",type:"modulo",name:c,value:a}):{domain:"core",type:"symbol",name:c}}return null}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",57 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",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", 58 type:"empty"};if("now"===c)return a.next(),{domain:"core",type:"now"};if("newline"===c)return a.next(),{domain:"core",type:"newline"};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("lowercase"===c)return a.next(),{domain:"core",type:"lowercase",value:a.getValue()};if("element"===c){c=a.getNextValue();if(a.tokenIs("of")&&a.nextIsSymbol()){var b=a.getSymbolRecord();a.next();if("variable"===59 b.keyword)return{domain:"core",type:"element",element:c,symbol:b.name}}return null}if("property"===c)return c=a.getNextValue(),a.tokenIs("of")&&a.nextIsSymbol()&&(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();if(a.tokenIs("of"))return a.next(), 60 {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":a.next();c=a.getValue();if(a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"core",type:"right",count:c,value:a};break;case "position":a.next();if(a.tokenIs("of")&&(a.next(),c= 61 !1,a.tokenIs("the")&&(a.next(),a.tokenIs("last")&&(a.next(),c=!0)),b=a.getValue(),a.tokenIs("in")))return a.next(),a=a.getValue(),{domain:"core",type:"position",needle:b,haystack:a,last:c};break;case "time":return a.next(),{domain:"core",type:"time"}}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",62 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),{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))*63 a,10)};case "valueOf":return a=parseInt(a.getValue(b.value)),{type:"constant",numeric:!0,content:a?a:0};case "lengthOf":return{type:"constant",numeric:!0,content:a.getValue(b.value).length};case "left":return{type:"constant",numeric:!1,content:a.getValue(b.value).substr(0,a.getValue(b.count))};case "right":return{type:"constant",numeric:!1,content:a.getValue(b.value).substr(a.getValue(b.count))};case "position":return c=a.getValue(b.needle),a=a.getValue(b.haystack),{type:"constant",numeric:!0,content:b.last? 64 a. lastIndexOf(c):a.indexOf(c)};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 "now":return{type:"constant",numeric:!0,content:Date.now()/1E3};case "newline":return{type:"constant",numeric:!1,content:"\n"};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))};65 case "lowercase":return{type:"constant",numeric:!1,content:a.getValue(b.value).toLowerCase()};case "element":c=a.getValue(b.element);b=a.getSymbolRecord(b.symbol);var d="";try{d=JSON.parse(a.getValue(b.value[b.index]))[c]}catch(k){}return{type:"constant",numeric:!1,content:"object"===typeof d?JSON.stringify(d):d};case "property":c=a.getValue(b.property);b=a.getSymbolRecord(b.symbol);a=a.getValue(b.value[b.index]);b="";if("object"===typeof a)b=a[c];else try{b=JSON.parse(a)[c]}catch(k){console.log("Can't parse "+ 66 a+": "+k.message)}return{type:"constant",numeric:!1,content:b};case "time":return{type:"constant",numeric:!0,content:Math.round((new Date).getTime())};case "module":return{type:"boolean",numeric:!1,content:a.getSymbolRecord(b.name).program}}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);if(a.tokenIs("even"))return a.next(),67 {domain:"core",type:"even",value1:c};if(a.tokenIs("odd"))return a.next(),{domain:"core",type:"odd",value1:c};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", 68 type:"boolean",value:c}}catch(n){}return null},test:function(a,b){switch(b.type){case "boolean":return a.getValue(b.value);case "even":return 0===a.getValue(b.value1)%2;case "odd":return 1===a.getValue(b.value1)%2;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)}return!1}}};g.exports=b},{}],6:[function(d, 69 g,f){var e=this,b=d("./Tokenise"),a=d("./Compile"),c=d("./Run"),m=d("./Value"),h=d("./Condition"),k=d("./Compare"),l={domain:{core:d("./Core")},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>',a.style.display="none")},runtimeError:function(a,70 b){this.lino=a;this.reportError({message:"Line "+(0<=a?a:"")+": "+b},l.program)},nonNumericValueError:function(a){this.runtimeError(a,"Non-numeric value")},variableDoesNotHoldAValueError:function(a,b){this.runtimeError(a,"Variable '"+b+"' does not hold a value")},reportError:function(b,c,d){if(b.message){d=this.compiling?d:c.source;var e=d.tokens;d=d.scriptLines;e=this.compiling?e[a.getIndex()].lino:c[c.pc].lino;c=this.compiling?"Compile error":"Runtime error in '"+c.script+"'";c+=":\n";var n=e-5; 71 for(n=0>n?0:n;n<e;n++){for(var p=""+(n+1);4>p.length;)p=" "+p;c+=p+" "+d[n].line.split("\\s").join(" ")+"\n"}c+=b.message+"\n";b=a.getWarnings();if(b.length)for(c+="Warnings:\n",b=$jscomp.makeIterator(b),d=b.next();!d.done;d=b.next())c+=d.value+"\n";console.log(c);alert(c);l.aborted=!0}else console.log("An error occurred - origin was "+b.path[0])},getSymbolRecord:function(a){a=this[this.symbols[a].pc];if(a.alias)return this[this.symbols[a.alias].pc];var b=a.exporter;b&&b!==this&&(b=b.getSymbolRecord(a.exportedName),72 a.value=b.value,a.index=b.index,a.elements=b.elements);return a},evaluate:function(a){return m.evaluate(this,a)},encode:function(a){return m.encode(a,this.encoding)},decode:function(a){return m.decode(a,this.encoding)},getValue:function(a){return m.getValue(this,a)},run:function(a){l.program=this;c(this,a)},trigger:function(a){(void 0===a?0:a)||this.forEach(function(a){if(a.exporter){var b=a.exporter.getSymbolRecord(a.exportedName);a.elements=b.elements;a.index=b.index;a.value=b.value}});this.onTrigger&& 73 c(this,this.onTrigger)},addJS:function(a,b,c){var d=document.createElement("script");d.type="text/javascript";d.src=b+"/"+a+".js";d.onload=function(){c(a)};document.head.appendChild(d)},register:function(a){l.program=a},runScript:function(a){var b=a[a.pc],c=a.getValue(b.script),d=b.imports;a=b.module?a.getSymbolRecord(b.module):null;l.tokeniseScript(c.split("\n"),d,a,this)},compileScript:function(b,d,e,f){var n=b.tokens;this.compiling=!0;var g=Date.now();a.value=m;a.condition=h;a.domain=l.domain;74 a.imports=d;d=a.compile(n);var p=Date.now();console.log("Compiled "+n.length+" tokens in "+(p-g)+"ms");this.compiling=!1;d.value=m;d.condition=h;d.compare=k;d.source=b;d.run=this.run;d.runScript=this.runScript;d.evaluate=this.evaluate;d.getValue=this.getValue;d.encode=this.encode;d.decode=this.decode;d.domain=this.domain;d.trigger=this.trigger;d.addJS=this.addJS;d.checkPlugin=this.checkPlugin;d.getPlugin=this.getPlugin;d.addLocalPlugin=this.addLocalPlugin;d.getPluginsPath=this.getPluginsPath;d.getSymbolRecord= 75 this.getSymbolRecord;d.runtimeError=this.runtimeError;d.nonNumericValueError=this.nonNumericValueError;d.variableDoesNotHoldAValueError=this.variableDoesNotHoldAValueError;d.reportError=this.reportError;d.register=this.register;d.symbols=a.getSymbols();d.encoding="ec";d.popups=[];d.stack=[];d.queue=[0];d.module=e;d.parent=f;e&&(e.program=d);this.setupTracer();c(d,0)},tokeniseScript:function(a,c,d,e){var f=Date.now();a=b.tokenise(a);var h=Date.now();console.log("Tokenised "+a.scriptLines.length+" lines in "+ 76 (h-f+" ms"));try{l.compileScript(a,c,d,e)}catch(t){"stop"!==t.message&&this.reportError(t,l.program,a)}},tokenize:function(a){a=a.split("\n");if(!e.tokenising){try{l.tokeniseScript(a)}catch(p){l.reportError(p)}e.tokenising=!0}},setPluginCount:function(a){e.plugins=[];e.pluginCount=a},checkPlugin:function(a){return l.domain[a]},getPlugin:function(a,b,c){l.domain[a]?c():(a=document.createElement("script"),a.type="text/javascript",a.src=b,a.onload=function(){console.log("Plugin "+b+" loaded");c()},document.head.appendChild(a))}, 77 a ddGlobalPlugin:function(a,b){e.plugins.push({name:a,handler:b});e.plugins.length===e.pluginCount&&(e.plugins.forEach(function(a){l.domain[a.name]=a.handler}),l.tokenize(e.source))},addLocalPlugin:function(a,b,c){l.domain[a]=b;c()},getPluginsPath:function(){return l.pluginsPath},loadPluginJs:function(a){var b=new XMLHttpRequest;b.open("GET",""+window.location.origin+a+"/easycoder/plugins.js",!0);b.onreadystatechange=function(){if(4===b.readyState)switch(b.status){case 200:var c=document.createElement("script");78 c. src=""+window.location.origin+a+"/easycoder/plugins.js";c.type="text/javascript";c.onload=function(){EasyCoder_Plugins.getGlobalPlugins(a,l.setPluginCount,l.getPlugin,l.addGlobalPlugin)};document.head.appendChild(c);l.pluginsPath=a;break;case 404:a?l.loadPluginJs(a.slice(0,a.lastIndexOf("/"))):l.reportError({message:"Can't load plugins.js"},l.program,this.source)}};b.send()},start:function(a){e.source=a;a=window.location.pathname;a.endsWith("/")&&(a=a.slice(0,-1));l.loadPluginJs(a)}};g.exports=79 l},{"./Compare":2,"./Compile":3,"./Condition":4,"./Core":5,"./Run":7,"./Tokenise":8,"./Value":9}],7:[function(d,g,f){var e=function(b,a){var c=[],d=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};if(c.length)c.push(a);else for(b.register(b),c.push(a);0<c.length&&!EasyCoder.aborted;)for(b.pc=c.shift(),b.watchdog=0,a={};;){if(1E6<b.watchdog){b.lino=b[b.pc].lino;b.reportError(Error("Program runaway intercepted.\nHave you forgotten to increment a loop counter?"), 80 b);break}b.watchdog++;var f=b[b.pc].domain;b.debugStep&&console.log(b.script+" "+b.pc+" "+f+":"+b[b.pc].keyword);var g=b.domain[f];if(!g){b.runtimeError(b[b.pc].lino,"Unknown domain '"+f+"'");break}b.pc=g.run(b);if(!b.pc)break;if(b.stop){b.tracing=!1;return}if(b.tracing){f=b[b.pc];g=b.source.scriptLines;var l=d(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); 81 if(1<e.elements)for(p+=a+": "+e.index+"/"+e.elements+": ",a=0;a<e.elements;a++){var f=e.value[a];p=f?p+(f.content+" "):p+"undefined "}else 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+='<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"); 82 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="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=83 "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}}};g.exports=e},{}],8:[function(d,g,f){var e={markComments:function(b){var a=b.list,c=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,84 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;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,42 a[a.pc],b=a.getValue(c.original).split("\\r").join("\r").split("\\n").join("\n"),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]={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()}},Run:{compile:function(a){var c=a.getLino(),b=a.getNextValue(),d=[];if(a.tokenIs("with"))for(;;)if(a.nextIsSymbol()){var e= 43 a.getSymbolRecord();e.exporter=a.getProgram();d.push(e);a.next();if(!a.tokenIs("and"))break}if(a.tokenIs("as")&&a.nextIsSymbol()&&(e=a.getSymbolRecord(),a.next(),"module"===e.keyword))var f=e.name;a.addCommand({domain:"core",keyword:"run",lino:c,script:b,imports:d,module:f});return!0},run:function(a){a.runScript(a);return 0<a.pc?a[a.pc].pc+1:0}},Script:{compile:function(a){var c=a.getLino(),b=a.nextToken();a.next();a.addCommand({domain:"core",keyword:"script",lino:c,name:b});return!0},run:function(a){var c= 44 a[a.pc];a.script=c.name;return c.pc+1}},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(l){a.rewind();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")&& 45 (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",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= 46 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.VariableDoesNotHoldAValueError(c.lino,b.name);break;case "setElements":b=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({}),b.element.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+ 47 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"===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= 48 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},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]; 49 d?(a=a.getValue(d)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a}):(f.numeric||a.nonNumericValueError(c,lino),a=a.getValue(f)-a.getValue(b),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.VariableDoesNotHoldAValueError(c.lino,e.name);return c.pc+1}},Toggle:{compile:function(a){var c=a.getLino();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], 50 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.VariableDoesNotHoldAValueError(c.lino,b.name);return c.pc+1}},Trigger:{compile:function(a){var c=a.getLino();a.next();return a.tokenIs("parent")?(a.next(),a.addCommand({domain:"core",keyword:"trigger",lino:c,module:"parent"}),!0):a.isSymbol()&&(moduleRecord=a.getSymbolRecord(),a.next(),"module"===moduleRecord.keyword)?(g=moduleRecord.name,a.addCommand({domain:"core", 51 keyword:"trigger",lino:c,module:g}),!0):!1},run:function(a){var c=a[a.pc];"parent"===c.module?a.parent&&a.parent.trigger(!0):(a=a.getSymbolRecord(c.module),a.exporter?(exporterRecord=a.exporter.getSymbolRecord(c.module),exporterRecord.program.trigger()):a.program.trigger());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=a.getLino();a.next();var b=a.getValue(a),d=1E3;switch(a.getToken()){case "milli":case "millis":a.next(); 52 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();var b=a.getCondition(),d=a.getPc();a.addCommand({domain:"core",keyword:"while",lino:c,condition:b}); 53 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;case "decode":return b.Decode;case "divide":return b.Divide;case "encode":return b.Encode; 54 case "end":return b.End;case "fork":return b.Fork;case "go":case "goto":return b.Go;case "gosub":return b.Gosub;case "if":return b.If;case "import":return b.Import;case "index":return b.Index;case "load":return b.Load;case "module":return b.Module;case "multiply":return b.Multiply;case "negate":return b.Negate;case "on":return b.On;case "print":return b.Print;case "put":return b.Put;case "replace":return b.Replace;case "return":return b.Return;case "run":return b.Run;case "script":return b.Script; 55 case "set":return b.Set;case "stop":return b.Stop;case "take":return b.Take;case "toggle":return b.Toggle;case "trigger":return b.Trigger;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.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= 56 a.getToken();switch(a.getSymbolRecord().keyword){case "module":return a.next(),{domain:"core",type:"module",name:c};case "variable":return a.nextTokenIs("modulo")?(a=a.getNextValue(),{domain:"core",type:"modulo",name:c,value:a}):{domain:"core",type:"symbol",name:c}}return null}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()}; 57 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",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("now"===c)return a.next(),{domain:"core",type:"now"};if("newline"=== 58 c)return a.next(),{domain:"core",type:"newline"};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("lowercase"===c)return a.next(),{domain:"core",type:"lowercase",value:a.getValue()};if("element"===c){c=a.getNextValue();if(a.tokenIs("of")&&a.nextIsSymbol()){var b=a.getSymbolRecord();a.next();if("variable"===b.keyword)return{domain:"core",type:"element",element:c,symbol:b.name}}return null}if("property"=== 59 c)return c=a.getNextValue(),a.tokenIs("of")&&a.nextIsSymbol()&&(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();if(a.tokenIs("of"))return a.next(),{domain:"core",type:"valueOf",value:a.getValue()};break;case "length":a.next(); 60 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":a.next();c=a.getValue();if(a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"core",type:"right",count:c,value:a};break;case "position":if(a.next(),a.tokenIs("of")&&(a.next(),c=!1,a.tokenIs("the")&&(a.next(),a.tokenIs("last")&&(a.next(),c=!0)),b=a.getValue(), 61 a.tokenIs("in")))return a.next(),a=a.getValue(),{domain:"core",type:"position",needle:b,haystack:a,last:c}}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", 62 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),{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 a=parseInt(a.getValue(b.value)),{type:"constant",numeric:!0,content:a?a:0};case "lengthOf":return{type:"constant", 63 numeric:!0,content:a.getValue(b.value).length};case "left":return{type:"constant",numeric:!1,content:a.getValue(b.value).substr(0,a.getValue(b.count))};case "right":return{type:"constant",numeric:!1,content:a.getValue(b.value).substr(a.getValue(b.count))};case "position":return c=a.getValue(b.needle),a=a.getValue(b.haystack),{type:"constant",numeric:!0,content:b.last?a.lastIndexOf(c):a.indexOf(c)};case "modulo":return c=a.getSymbolRecord(b.name),a=a.evaluate(b.value),{type:"constant",numeric:!0,content:c.value[c.index].content% 64 a.content};case "empty":return{type:"constant",numeric:!1,content:""};case "now":return{type:"constant",numeric:!0,content:Date.now()/1E3};case "newline":return{type:"constant",numeric:!1,content:"\n"};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 "lowercase":return{type:"constant",numeric:!1,content:a.getValue(b.value).toLowerCase()};case "element":c=a.getValue(b.element); 65 b=a.getSymbolRecord(b.symbol);var d="";try{d=JSON.parse(a.getValue(b.value[b.index]))[c]}catch(l){}return{type:"constant",numeric:!1,content:"object"===typeof d?JSON.stringify(d):d};case "property":c=a.getValue(b.property);b=a.getSymbolRecord(b.symbol);a=a.getValue(b.value[b.index]);b="";if("object"===typeof a)b=a[c];else try{b=JSON.parse(a)[c]}catch(l){console.log("Can't parse "+a+": "+l.message)}return{type:"constant",numeric:!1,content:b};case "module":return{type:"boolean",numeric:!1,content:a.getSymbolRecord(b.name).program}}return null}, 66 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);if(a.tokenIs("even"))return a.next(),{domain:"core",type:"even",value1:c};if(a.tokenIs("odd"))return a.next(),{domain:"core",type:"odd",value1:c};if(a.tokenIs("greater")){a.next();if(a.tokenIs("than")){a.next();var e=a.getValue();return{domain:"core",type:"greater",value1:c, 67 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){}return null},test:function(a,b){switch(b.type){case "boolean":return a.getValue(b.value);case "even":return 0===a.getValue(b.value1)%2;case "odd":return 1===a.getValue(b.value1)% 68 2;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)}return!1}}};g.exports=b},{}],6:[function(d,g,f){var e=this,b=d("./Tokenise"),a=d("./Compile"),c=d("./Run"),m=d("./Value"),h=d("./Condition"),l=d("./Compare"),k={domain:{core:d("./Core")},setupTracer:function(){var a=document.getElementById("easycoder-tracer"); 69 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>',a.style.display="none")},runtimeError:function(a,b){this.lino=a;this.reportError({message:"Line "+(0<=a?a:"")+": "+b},k.program)},nonNumericValueError:function(a){this.runtimeError(a,"Non-numeric value")},variableDoesNotHoldAValueError:function(a,b){this.runtimeError(a, 70 "Variable '"+b+"' does not hold a value")},reportError:function(b,c,d){if(b.message){d=this.compiling?d:c.source;var e=d.tokens;d=d.scriptLines;e=this.compiling?e[a.getIndex()].lino:c[c.pc].lino;c=this.compiling?"Compile error":"Runtime error in '"+c.script+"'";c+=":\n";var n=e-5;for(n=0>n?0:n;n<e;n++){for(var p=""+(n+1);4>p.length;)p=" "+p;c+=p+" "+d[n].line.split("\\s").join(" ")+"\n"}c+=b.message+"\n";b=a.getWarnings();if(b.length)for(c+="Warnings:\n",b=$jscomp.makeIterator(b),d=b.next();!d.done;d= 71 b.next())c+=d.value+"\n";console.log(c);alert(c);k.aborted=!0}else console.log("An error occurred - origin was "+b.path[0])},getSymbolRecord:function(a){a=this[this.symbols[a].pc];if(a.alias)return this[this.symbols[a.alias].pc];var b=a.exporter;b&&b!==this&&(b=b.getSymbolRecord(a.exportedName),a.value=b.value,a.index=b.index,a.elements=b.elements);return a},evaluate:function(a){return m.evaluate(this,a)},encode:function(a){return m.encode(a,this.encoding)},decode:function(a){return m.decode(a,this.encoding)}, 72 getValue:function(a){return m.getValue(this,a)},run:function(a){k.program=this;c(this,a)},trigger:function(a){(void 0===a?0:a)||this.forEach(function(a){if(a.exporter){var b=a.exporter.getSymbolRecord(a.exportedName);a.elements=b.elements;a.index=b.index;a.value=b.value}});this.onTrigger&&c(this,this.onTrigger)},addJS:function(a,b,c){var d=document.createElement("script");d.type="text/javascript";d.src=b+"/"+a+".js";d.onload=function(){c(a)};document.head.appendChild(d)},register:function(a){k.program= 73 a},runScript:function(a){var b=a[a.pc],c=a.getValue(b.script),d=b.imports;a=b.module?a.getSymbolRecord(b.module):null;k.tokeniseScript(c.split("\n"),d,a,this)},compileScript:function(b,d,e,f){var n=b.tokens;this.compiling=!0;var g=Date.now();a.value=m;a.condition=h;a.domain=k.domain;a.imports=d;d=a.compile(n);var p=Date.now();console.log(p-k.timestamp+" ms: Compiled "+n.length+" tokens in "+(p-g+" ms"));this.compiling=!1;d.EasyCoder=k;d.value=m;d.condition=h;d.compare=l;d.source=b;d.run=this.run; 74 d.runScript=this.runScript;d.evaluate=this.evaluate;d.getValue=this.getValue;d.encode=this.encode;d.decode=this.decode;d.domain=this.domain;d.trigger=this.trigger;d.addJS=this.addJS;d.checkPlugin=this.checkPlugin;d.getPlugin=this.getPlugin;d.addLocalPlugin=this.addLocalPlugin;d.getPluginsPath=this.getPluginsPath;d.getSymbolRecord=this.getSymbolRecord;d.runtimeError=this.runtimeError;d.nonNumericValueError=this.nonNumericValueError;d.variableDoesNotHoldAValueError=this.variableDoesNotHoldAValueError; 75 d.reportError=this.reportError;d.register=this.register;d.symbols=a.getSymbols();d.encoding="ec";d.popups=[];d.stack=[];d.queue=[0];d.module=e;d.parent=f;e&&(e.program=d);this.setupTracer();c(d,0)},tokeniseScript:function(a,c,d,e){var f=Date.now();a=b.tokenise(a);var h=Date.now();console.log(h-k.timestamp+" ms: Tokenised "+a.scriptLines.length+" lines in "+(h-f+" ms"));try{k.compileScript(a,c,d,e)}catch(t){"stop"!==t.message&&this.reportError(t,k.program,a)}},tokenize:function(a){a=a.split("\n"); 76 if(!e.tokenising){try{k.tokeniseScript(a)}catch(p){k.reportError(p)}e.tokenising=!0}},setPluginCount:function(a){e.plugins=[];e.pluginCount=a},checkPlugin:function(a){return k.domain[a]},getPlugin:function(a,b,c){k.domain[a]?c():(a=document.createElement("script"),a.type="text/javascript",a.src=b,a.onload=function(){console.log("Plugin "+b+" loaded");c()},document.head.appendChild(a))},addGlobalPlugin:function(a,b){e.plugins.push({name:a,handler:b});e.plugins.length===e.pluginCount&&(e.plugins.forEach(function(a){k.domain[a.name]= 77 a.handler}),k.tokenize(e.source))},addLocalPlugin:function(a,b,c){k.domain[a]=b;c()},getPluginsPath:function(){return k.pluginsPath},loadPluginJs:function(a){console.log(Date.now()-k.timestamp+" ms: Load plugins.js");var b=new XMLHttpRequest;b.open("GET",""+window.location.origin+a+"/easycoder/plugins.js",!0);b.onreadystatechange=function(){if(4===b.readyState)switch(b.status){case 200:var c=document.createElement("script");c.src=""+window.location.origin+a+"/easycoder/plugins.js";c.type="text/javascript"; 78 c.onload=function(){EasyCoder_Plugins.getGlobalPlugins(k.timestamp,a,k.setPluginCount,k.getPlugin,k.addGlobalPlugin)};document.head.appendChild(c);k.pluginsPath=a;break;case 404:a?k.loadPluginJs(a.slice(0,a.lastIndexOf("/"))):k.reportError({message:"Can't load plugins.js"},k.program,this.source)}};b.send()},start:function(a){e.source=a;a=window.location.pathname;a.endsWith("/")&&(a=a.slice(0,-1));k.loadPluginJs(a)}};g.exports=k},{"./Compare":2,"./Compile":3,"./Condition":4,"./Core":5,"./Run":7,"./Tokenise":8, 79 "./Value":9}],7:[function(d,g,f){var e=function(b,a){var c=[],d=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};if(c.length)c.push(a);else for(b.register(b),c.push(a);0<c.length&&!EasyCoder.aborted;)for(b.pc=c.shift(),b.watchdog=0,a={};;){if(1E6<b.watchdog){b.lino=b[b.pc].lino;b.reportError(Error("Program runaway intercepted.\nHave you forgotten to increment a loop counter?"),b);break}b.watchdog++;var f=b[b.pc].domain;b.debugStep&& 80 console.log(b.script+" "+b.pc+" "+f+":"+b[b.pc].keyword);var g=b.domain[f];if(!g){b.runtimeError(b[b.pc].lino,"Unknown domain '"+f+"'");break}b.pc=g.run(b);if(!b.pc)break;if(b.stop){b.tracing=!1;return}if(b.tracing){f=b[b.pc];g=b.source.scriptLines;var k=d(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);if(1<e.elements)for(p+=a+": "+e.index+"/"+e.elements+ 81 ": ",a=0;a<e.elements;a++){var f=e.value[a];p=f?p+(f.content+" "):p+"undefined "}else 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+='<input type="text" name="'+q+'"'+('value="'+g[f.lino-q].line.substr(k)+'"')+'style="width:100%;border:none;enabled:false">'),n+="<br>";f=document.getElementById("easycoder-tracer-content");f.innerHTML= 82 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="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= 83 "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}}};g.exports=e},{}],8:[function(d,g,f){var e={markComments:function(b){var a=b.list,c=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 k={list:a,index:c+1,inComment:!1,newList:f.concat({lino:b,index:c,token:g})};f={list:a,index:c+1,inComment:!0, 84 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(k)},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;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, 85 85 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 "'+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+ 86 86 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});return{scriptLines:b,tokens:a}}};g.exports=e},{}],9:[function(d,g,f){var e={getItem:function(b){var a=b.getToken();if(!a)return null;if("true"===a)return b.next(), -
easycoder/trunk/easycoder.js
r1990067 r1996019 4 4 const EasyCoder = require('./easycoder/Main'); 5 5 6 console.log('Starting up EasyCoder...'); 6 EasyCoder.timestamp = Date.now(); 7 console.log(`Starting up EasyCoder...`); 7 8 window.onload = function () { 8 9 … … 222 223 index: 0, 223 224 value: [{}], 225 element: [], 224 226 extra 225 227 }; 228 if (extra === 'dom') { 229 command.element = []; 230 } 226 231 EasyCoder_Compiler.addCommand(command); 227 232 return command; … … 942 947 const program = compiler.getProgram(); 943 948 for (const symbolRecord of imports) { 944 compiler.next(); 945 const thisType = compiler.getToken(); 949 const thisType = compiler.nextToken(); 946 950 const exportedType = symbolRecord.keyword; 947 951 if (thisType === exportedType) { … … 950 954 newRecord.exporter = symbolRecord.exporter; 951 955 newRecord.exportedName = symbolRecord.name; 956 newRecord.extra = symbolRecord.extra; 952 957 newRecord.imported = true; 953 958 if (!compiler.tokenIs('and')) { … … 971 976 compile: compiler => { 972 977 const lino = compiler.getLino(); 973 compiler.next();974 978 // get the variable 975 if (compiler. isSymbol()) {979 if (compiler.nextIsSymbol()) { 976 980 const symbol = compiler.getToken(); 977 compiler.next(); 978 if (compiler.tokenIs('to')) { 979 compiler.next(); 981 if (compiler.nextTokenIs('to')) { 980 982 // get the value 981 const value = compiler.get Value();983 const value = compiler.getNextValue(); 982 984 compiler.addCommand({ 983 985 domain: 'core', … … 1368 1370 compile: compiler => { 1369 1371 const lino = compiler.getLino(); 1370 compiler.next(); 1371 const script = compiler.getValue(); 1372 const script = compiler.getNextValue(); 1372 1373 const imports = []; 1373 1374 if (compiler.tokenIs('with')) { 1374 1375 while (true) { 1375 compiler.next(); 1376 if (compiler.isSymbol()) { 1376 if (compiler.nextIsSymbol()) { 1377 1377 const symbolRecord = compiler.getSymbolRecord(); 1378 1378 symbolRecord.exporter = compiler.getProgram(); … … 1387 1387 var module; 1388 1388 if (compiler.tokenIs('as')) { 1389 compiler.next(); 1390 if (compiler.isSymbol()) { 1389 if (compiler.nextIsSymbol()) { 1391 1390 const moduleRecord = compiler.getSymbolRecord(); 1392 1391 compiler.next(); … … 1419 1418 compile: compiler => { 1420 1419 const lino = compiler.getLino(); 1421 compiler.next(); 1422 const name = compiler.getToken(); 1420 const name = compiler.nextToken(); 1423 1421 compiler.next(); 1424 1422 compiler.addCommand({ … … 1552 1550 for (var n = 0; n < symbol.elements; n++) { 1553 1551 symbol.value.push({}); 1552 symbol.element.push(""); 1554 1553 } 1555 1554 break; … … 2253 2252 } 2254 2253 break; 2255 case 'time': 2256 compiler.next(); 2257 return { 2258 domain: 'core', 2259 type: 'time' 2260 }; 2261 } 2262 ; 2254 }; 2263 2255 return null; 2264 2256 }, … … 2420 2412 content 2421 2413 }; 2422 case 'time':2423 return {2424 type: 'constant',2425 numeric: true,2426 content: Math.round(new Date().getTime())2427 };2428 2414 case 'module': 2429 2415 const module = program.getSymbolRecord(value.name); … … 2703 2689 compileScript: function (source, imports, module, parent) { 2704 2690 const { tokens } = source; 2705 // console.log('Compile script: ');2706 2691 this.compiling = true; 2707 2692 const startCompile = Date.now(); … … 2713 2698 const program = EasyCoder_Compiler.compile(tokens); 2714 2699 const finishCompile = Date.now(); 2715 console.log( 'Compiled ' + tokens.length + ' tokens in ' + (finishCompile - startCompile) + 'ms');2700 console.log(`${finishCompile - EasyCoder.timestamp} ms: Compiled ${tokens.length} tokens in ` + `${finishCompile - startCompile} ms`); 2716 2701 // console.log('Program: ' + JSON.stringify(program, null, 2)); 2717 2702 this.compiling = false; 2718 2703 2704 program.EasyCoder = EasyCoder; 2719 2705 program.value = EasyCoder_Value; 2720 2706 program.condition = EasyCoder_Condition; … … 2761 2747 const source = EasyCoder_Tokenise.tokenise(file); 2762 2748 const finishTokenise = Date.now(); 2763 console.log(` Tokenised ${source.scriptLines.length} lines in ` + `${finishTokenise - startTokenise} ms`);2749 console.log(`${finishTokenise - EasyCoder.timestamp} ms: Tokenised ${source.scriptLines.length} lines in ` + `${finishTokenise - startTokenise} ms`); 2764 2750 // console.log('Source: ' + JSON.stringify(source, null, 2)); 2765 2751 try { … … 2828 2814 2829 2815 loadPluginJs: pathname => { 2816 console.log(`${Date.now() - EasyCoder.timestamp} ms: Load plugins.js`); 2830 2817 const fullPath = `${window.location.origin}${pathname}/easycoder/plugins.js`; 2831 2818 const ajax = new XMLHttpRequest(); … … 2839 2826 script.type = 'text/javascript'; 2840 2827 script.onload = function () { 2841 EasyCoder_Plugins.getGlobalPlugins( pathname, EasyCoder.setPluginCount, EasyCoder.getPlugin, EasyCoder.addGlobalPlugin);2828 EasyCoder_Plugins.getGlobalPlugins(EasyCoder.timestamp, pathname, EasyCoder.setPluginCount, EasyCoder.getPlugin, EasyCoder.addGlobalPlugin); 2842 2829 }; 2843 2830 document.head.appendChild(script); -
easycoder/trunk/easycoder.php
r1990067 r1996019 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. 76 * Version: 2.1.8 7 7 * Author: EasyCoder Software 8 8 * Author URI: https://easycoder.software … … 17 17 function easycoder_enqueue_script() { 18 18 wp_enqueue_script('easycoder_script', plugin_dir_url( __FILE__ ) 19 . 'easycoder-min.js', array(), '2.1. 7');19 . 'easycoder-min.js', array(), '2.1.8'); 20 20 } 21 21 -
easycoder/trunk/plugins-sample.js
r1987789 r1996019 1 1 const EasyCoder_Plugins = { 2 2 3 getGlobalPlugins: (path, setPluginCount, getPlugin, addPlugin) => { 4 3 getGlobalPlugins: (timestamp, path, setPluginCount, getPlugin, addPlugin) => { 4 5 console.log(`${Date.now() - timestamp} ms: Load plugins`); 6 5 7 /* 6 8 * To include EasyCoder global plugins in your site, add them here. -
easycoder/trunk/plugins/browser.js
r1990067 r1996019 46 46 case 'div': 47 47 case 'form': 48 case 'header': 48 case 'h1': 49 case 'h2': 50 case 'h3': 51 case 'h4': 52 case 'h5': 53 case 'h6': 49 54 case 'p': 50 55 case 'a': … … 78 83 } 79 84 } 80 compiler.addWarning( 'Unrecognised syntax in \'attach\'');85 compiler.addWarning(`Unrecognised syntax in 'attach'`); 81 86 return false; 82 87 }, … … 85 90 const command = program[program.pc]; 86 91 const content = program.value.evaluate(program, command.cssId).content; 87 try { 88 const element = document.getElementById(content); 89 if (!element) { 90 throw Error(`No such element: '${content}'`); 91 } 92 } catch (err) { 93 console.log(err.message); 94 program.runtimeError(command.lino, err.message); 92 const element = document.getElementById(content); 93 if (!element) { 94 program.runtimeError(command.lino, `No such element: '${content}'`); 95 return 0; 95 96 } 96 97 const target = program.getSymbolRecord(command.symbol); 98 target.element[target.index] = element; 97 99 target.value[target.index] = { 98 100 type: 'constant', … … 144 146 if (compiler.nextIsSymbol()) { 145 147 const symbolRecord = compiler.getSymbolRecord(); 146 const target = symbolRecord.name; 147 compiler.next(); 148 switch (symbolRecord.keyword) { 149 case 'audioclip': 150 if (compiler.tokenIs('from')) { 151 compiler.next(); 152 } 153 const value = compiler.getValue(); 148 if (symbolRecord.keyword === 'audioclip') { 149 if (compiler.nextTokenIs('from')) { 150 const value = compiler.getNextValue(); 154 151 compiler.addCommand({ 155 152 domain: 'browser', … … 158 155 name: symbolRecord.name, 159 156 lino, 160 target,161 157 value 162 158 }); 163 159 return true; 164 case 'div': 165 case 'p': 166 case 'h1': 167 case 'h2': 168 case 'h3': 169 case 'h4': 170 case 'h5': 171 case 'h6': 172 case 'span': 173 case 'button': 174 case 'input': 175 case 'pre': 176 var inputType = ''; 177 if (symbolRecord.keyword === 'input') { 178 if (compiler.tokenIs('type')) { 179 compiler.next(); 180 inputType = compiler.getToken(); 181 compiler.next(); 182 } else { 183 throw new Error('Missing input type'); 184 } 185 } 186 if (compiler.tokenIs('in')) { 160 } 161 return false; 162 } 163 if (['a', 164 'button', 165 'div', 166 'form', 167 'h1', 168 'h2', 169 'h3', 170 'h4', 171 'h5', 172 'h6', 173 'img', 174 'input', 175 'li', 176 'p', 177 'pre', 178 'select', 179 'span', 180 'text', 181 'textarea', 182 'ul' 183 ].includes(symbolRecord.keyword)) { 184 if (compiler.nextTokenIs('in')) { 185 if (compiler.nextIsSymbol()) { 186 const parentRecord = compiler.getSymbolRecord(); 187 187 compiler.next(); 188 if (compiler.isSymbol()) { 189 const parentRecord = compiler.getSymbolRecord(); 190 if (parentRecord.extra !== 'dom') { 191 throw new Error(`Inappropriate type '${parentRecord.keyword}'`); 192 } 193 compiler.next(); 194 var className = ''; 195 var style = ''; 196 var text = ''; 197 var flag = true; 198 while (flag) { 199 const token = compiler.getToken(); 200 if (!token) { 201 break; 202 } 203 compiler.next(); 204 switch (token) { 205 case 'class': 206 className = compiler.getValue(); 207 break; 208 case 'style': 209 style = compiler.getValue(); 210 break; 211 case 'text': 212 text = compiler.getValue(); 213 break; 214 default: 215 compiler.prev(); 216 flag = false; 217 break; 218 } 219 } 220 compiler.addCommand({ 221 domain: 'browser', 222 keyword: 'create', 223 lino, 224 type: symbolRecord.keyword, 225 name: symbolRecord.name, 226 inputType, 227 className, 228 style, 229 text, 230 parent: parentRecord.name 231 }); 232 return true; 233 } 234 } 235 break; 188 compiler.addCommand({ 189 domain: 'browser', 190 keyword: 'create', 191 lino, 192 name: symbolRecord.name, 193 parent: parentRecord.name 194 }); 195 return true; 196 } 197 } 236 198 } 237 199 } … … 248 210 default: 249 211 const parentRecord = program.getSymbolRecord(command.parent); 250 const container = document.getElementById(parentRecord.value[parentRecord.index].content); 251 const element = document.createElement(command.type); 252 element.id = "easycoder-" + targetRecord.name + "-" + targetRecord.index; 253 targetRecord.value[targetRecord.index] = { 254 type: 'constant', 255 numeric: false, 256 content: element.id 257 }; 258 container.appendChild(element); 259 if (command.inputType) { 260 element.setAttribute('type', command.inputType); 261 } 262 if (command.className) { 263 element.className = command.className; 264 } 265 const styles = program.value.evaluate(program, command.style).content; 266 for (const item of styles.split(';')) { 267 const style = item.split(':'); 268 element.style[style[0]] = style[1]; 269 } 270 ; 271 if (command.text) { 272 element.textContent = program.value.evaluate(program, command.text).content; 273 } 212 if (!parentRecord.element[parentRecord.index]) { 213 parentRecord.element[parentRecord.index] = document.getElementById(parentRecord.value[parentRecord.index].content); 214 } 215 targetRecord.element[targetRecord.index] = document.createElement(targetRecord.keyword); 216 if (!this.elementId) { 217 this.elementId = 0; 218 } 219 targetRecord.element[targetRecord.index].id = this.elementId++; 220 parentRecord.element[parentRecord.index].appendChild(targetRecord.element[targetRecord.index]); 274 221 break; 275 222 } … … 350 297 compile: (compiler) => { 351 298 const item = compiler.compileVariable('browser', 'form', false, 'dom'); 352 return true;353 },354 355 run: (program) => {356 return program[program.pc].pc + 1;357 }358 },359 360 Header: {361 362 compile: (compiler) => {363 const item = compiler.compileVariable('browser', 'header', false, 'dom');364 299 return true; 365 300 }, … … 444 379 }, 445 380 381 H1: { 382 383 compile: (compiler) => { 384 const item = compiler.compileVariable('browser', 'h1', false, 'dom'); 385 return true; 386 }, 387 388 run: (program) => { 389 return program[program.pc].pc + 1; 390 } 391 }, 392 393 H2: { 394 395 compile: (compiler) => { 396 const item = compiler.compileVariable('browser', 'h2', false, 'dom'); 397 return true; 398 }, 399 400 run: (program) => { 401 return program[program.pc].pc + 1; 402 } 403 }, 404 405 H3: { 406 407 compile: (compiler) => { 408 const item = compiler.compileVariable('browser', 'h3', false, 'dom'); 409 return true; 410 }, 411 412 run: (program) => { 413 return program[program.pc].pc + 1; 414 } 415 }, 416 417 H4: { 418 419 compile: (compiler) => { 420 const item = compiler.compileVariable('browser', 'h4', false, 'dom'); 421 return true; 422 }, 423 424 run: (program) => { 425 return program[program.pc].pc + 1; 426 } 427 }, 428 429 H5: { 430 431 compile: (compiler) => { 432 const item = compiler.compileVariable('browser', 'h5', false, 'dom'); 433 return true; 434 }, 435 436 run: (program) => { 437 return program[program.pc].pc + 1; 438 } 439 }, 440 441 H6: { 442 443 compile: (compiler) => { 444 const item = compiler.compileVariable('browser', 'h6', false, 'dom'); 445 return true; 446 }, 447 448 run: (program) => { 449 return program[program.pc].pc + 1; 450 } 451 }, 452 446 453 IMG: { 447 454 … … 542 549 const command = program[program.pc]; 543 550 if (command.subject) { 544 window.location.href = `mailto:${program.getValue(command.to)}` 545 +`?subject=${program.getValue(command.subject)}&body=${program.getValue(command.body)}`;551 window.location.href = `mailto:${program.getValue(command.to)}` + 552 `?subject=${program.getValue(command.subject)}&body=${program.getValue(command.body)}`; 546 553 } else { 547 554 window.location.href = `mailto:${program.getValue(command.to)}`; … … 649 656 break; 650 657 case 'click': 651 const clickItem = program.getSymbolRecord(command.symbol); 652 clickItem.value.forEach(function (value, index) { 653 const cssId = value.content; 654 if (cssId) { 655 const target = document.getElementById(cssId); 656 target.targetPc = command.pc + 2; 657 target.targetIndex = index; 658 target.onclick = function (event) { 659 const eventTarget = event.target; 660 eventTarget.blur(); 661 clickItem.index = eventTarget.targetIndex; 662 setTimeout(function () { 663 program.run(eventTarget.targetPc); 664 }, 1); 665 return false; 666 }; 667 } 658 const targetRecord = program.getSymbolRecord(command.symbol); 659 660 targetRecord.element.forEach(function (element, index) { 661 var target = targetRecord.element[index]; 662 target.targetRecord = targetRecord; 663 target.targetIndex = index; 664 target.targetPc = command.pc + 2; 665 target.onclick = function (event) { 666 const eventTarget = event.target; 667 eventTarget.blur(); 668 eventTarget.targetRecord.index = eventTarget.targetIndex; 669 setTimeout(function () { 670 program.run(eventTarget.targetPc); 671 }, 1); 672 return false; 673 }; 668 674 }); 669 675 break; … … 677 683 }, 1); 678 684 } catch (err) { 679 console.log( 'Error: ' + err.message);685 console.log(`Error: ${err.message}`); 680 686 } 681 687 return true; … … 782 788 } 783 789 }, 784 790 785 791 Put: { 786 792 … … 812 818 const command = program[program.pc]; 813 819 window.localStorage.setItem(program.getValue(command.key), program.getValue(command.value)); 820 return command.pc + 1; 821 } 822 }, 823 824 Remove: { 825 826 compile: (compiler) => { 827 const lino = compiler.getLino(); 828 if (compiler.nextTokenIs('attribute')) { 829 const attribute = compiler.getNextValue(); 830 if (compiler.tokenIs('of')) { 831 if (compiler.nextIsSymbol()) { 832 const targetRecord = compiler.getSymbolRecord(); 833 if (targetRecord.extra !== 'dom') { 834 throw new Error(`Inappropriate type '${targetRecord.keyword}'`); 835 } 836 compiler.next(); 837 compiler.addCommand({ 838 domain: 'browser', 839 keyword: 'remove', 840 lino, 841 attribute, 842 target: targetRecord.name 843 }); 844 return true; 845 } 846 } 847 } 848 return false; 849 }, 850 851 // runtime 852 853 run: (program) => { 854 const command = program[program.pc]; 855 const attribute = program.getValue(command.attribute); 856 const targetRecord = program.getSymbolRecord(command.target); 857 targetId = program.getValue(targetRecord.value[targetRecord.index]); 858 target = document.getElementById(targetId); 859 target.removeAttribute(attribute); 814 860 return command.pc + 1; 815 861 } … … 900 946 throw new Error(`Expected a symbol at '{compiler.getToken()}'`); 901 947 } 948 } else if (token === 'id') { 949 if (compiler.nextTokenIs('of')) { 950 if (compiler.nextIsSymbol()) { 951 const symbol = compiler.getSymbolRecord(); 952 if (symbol.extra === 'dom') { 953 if (compiler.nextTokenIs('to')) { 954 const value = compiler.getNextValue(); 955 compiler.addCommand({ 956 domain: 'browser', 957 keyword: 'set', 958 lino, 959 type: 'setId', 960 symbolName: symbol.name, 961 value 962 }); 963 return true; 964 } 965 } 966 } 967 } 902 968 } else if (token === 'text') { 903 969 if (compiler.nextTokenIs('of')) { 904 compiler.next(); 905 if (compiler.isSymbol()) { 970 if (compiler.nextIsSymbol()) { 906 971 const symbol = compiler.getSymbolRecord(); 907 972 switch (symbol.keyword) { … … 909 974 case 'input': 910 975 if (compiler.nextTokenIs('to')) { 911 compiler.next(); 912 const value = compiler.getValue(); 976 const value = compiler.getNextValue(); 913 977 compiler.addCommand({ 914 978 domain: 'browser', … … 977 1041 } 978 1042 } else if (token === 'style') { 979 const styleName = compiler.getNextValue(); 1043 if (compiler.nextTokenIs('of')) { 1044 if (compiler.nextIsSymbol()) { 1045 const symbolRecord = compiler.getSymbolRecord(); 1046 symbolName = symbolRecord.name; 1047 if (symbolRecord.extra !== 'dom') { 1048 compiler.warning(`'${symbolName}' is not a DOM type`); 1049 return false; 1050 } 1051 if (compiler.nextTokenIs('to')) { 1052 const styleValue = compiler.getNextValue(); 1053 if (styleValue) { 1054 compiler.addCommand({ 1055 domain: 'browser', 1056 keyword: 'set', 1057 lino, 1058 type: 'setStyles', 1059 symbolName, 1060 styleValue 1061 }); 1062 return true; 1063 } 1064 } 1065 } 1066 compiler.warning(`'${compiler.getToken()}' is not a symbol`); 1067 return false; 1068 } 1069 const styleName = compiler.getValue(); 980 1070 var type = 'setStyle'; 981 1071 var symbolName = ''; 982 1072 if (compiler.tokenIs('of')) { 983 984 1073 if (compiler.nextToken() === 'body') { 985 1074 type = 'setBodyStyle'; 986 1075 } else if (compiler.isSymbol()) { 987 symbolName = compiler.getToken(); 1076 const symbolRecord = compiler.getSymbolRecord(); 1077 symbolName = symbolRecord.name; 1078 if (symbolRecord.extra !== 'dom') { 1079 throw Error(`'${symbolName}' is not a DOM type`); 1080 } 988 1081 } else { 989 1082 throw Error(`'${compiler.getToken()}' is not a known symbol`); 990 1083 } 991 compiler.next(); 992 if (compiler.tokenIs('to')) { 1084 if (compiler.nextTokenIs('to')) { 993 1085 const styleValue = compiler.getNextValue(); 994 1086 if (styleValue) { … … 1008 1100 } 1009 1101 } 1010 compiler.addWarning( 'Unrecognised syntax in \'set\'');1102 compiler.addWarning(`Unrecognised syntax in 'set'`); 1011 1103 return false; 1012 1104 }, … … 1025 1117 targetVar = program.getSymbolRecord(command.target); 1026 1118 const source = document.getElementById(sourceVar.value[sourceVar.index].content); 1027 target = document.getElementById(targetVar.value[targetVar.index].content); 1119 target = targetVar.element[targetVar.index]; 1120 if (!target) { 1121 targetId = program.getValue(targetVar.value[targetVar.index]); 1122 target = document.getElementById(targetId); 1123 } 1028 1124 target.innerHTML = source.innerHTML; 1029 1125 break; 1030 1126 case 'setContent': 1031 const valueSpec = program.value.evaluate(program,command.value);1032 value = valueSpec.content;1033 if (valueSpec.numeric) {1034 value = '' + value;1035 }1127 value = program.getValue(command.value); 1128 // 2018-12-14 1129 // if (valueSpec.numeric) { 1130 // value = '' + value; 1131 // } 1036 1132 targetVar = program.getSymbolRecord(command.target); 1037 cssId = targetVar.value[targetVar.index].content; 1038 if (!cssId) { 1039 program.runtimeError(command.lino, 1040 'Variable \'' + targetVar.name + '\' has not been attached to a DOM element.'); 1041 } 1042 target = document.getElementById(cssId); 1133 target = targetVar.element[targetVar.index]; 1134 if (!target) { 1135 cssId = targetVar.value[targetVar.index].content; 1136 if (!cssId) { 1137 program.runtimeError(command.lino, 1138 `Variable '${targetVar.name}' has not been attached to a DOM element.`); 1139 } 1140 target = document.getElementById(cssId); 1141 } 1142 targetVar.element[targetVar.index] = target; 1043 1143 switch (targetVar.keyword) { 1044 1144 case 'text': … … 1054 1154 } 1055 1155 break; 1156 case 'setId': 1157 symbol = program.getSymbolRecord(command.symbolName); 1158 target = symbol.element[symbol.index]; 1159 if (!target) { 1160 targetId = program.getValue(symbol.value[symbol.index]); 1161 target = document.getElementById(targetId); 1162 } 1163 target.id = program.getValue(command.value); 1164 break; 1056 1165 case 'setText': 1057 1166 symbol = program.getSymbolRecord(command.symbolName); 1058 target = document.getElementById(symbol.value[symbol.index].content); 1059 value = program.value.evaluate(program, command.value).content; 1167 target = symbol.element[symbol.index]; 1168 if (!target) { 1169 targetId = program.getValue(symbol.value[symbol.index]); 1170 target = document.getElementById(targetId); 1171 } 1172 value = program.getValue(command.value); 1060 1173 switch (symbol.keyword) { 1061 1174 case 'button': … … 1072 1185 symbol = program.getSymbolRecord(command.symbolName); 1073 1186 if (symbol.keyword === 'input') { 1074 targetId = symbol.value[symbol.index].content; 1075 target = document.getElementById(targetId); 1187 target = symbol.element[symbol.index]; 1188 if (!target) { 1189 targetId = program.getValue(symbol.value[symbol.index]); 1190 target = document.getElementById(targetId); 1191 } 1076 1192 target.size = program.getValue(command.value); 1077 1193 } else { … … 1081 1197 case 'setAttribute': 1082 1198 symbol = program.getSymbolRecord(command.symbolName); 1083 targetId = program.getValue(symbol.value[symbol.index]); 1084 target = document.getElementById(targetId); 1199 target = symbol.element[symbol.index]; 1200 if (!target) { 1201 targetId = program.getValue(symbol.value[symbol.index]); 1202 target = document.getElementById(targetId); 1203 } 1085 1204 const attributeName = program.getValue(command.attributeName); 1086 1205 if (command.attributeValue.type === 'boolean') { … … 1091 1210 break; 1092 1211 case 'setStyle': 1212 case 'setStyles': 1093 1213 symbol = program.getSymbolRecord(command.symbolName); 1094 const styleValue = program.value.evaluate(program, command.styleValue); 1214 target = symbol.element[symbol.index]; 1215 if (!target) { 1216 targetId = program.getValue(symbol.value[symbol.index]); 1217 target = document.getElementById(targetId); 1218 } 1219 const styleValue = program.getValue(command.styleValue); 1095 1220 if (!symbol.value[symbol.index]) { 1096 1221 program.runtimeError(command.lino, `Variable '${symbol.name}' has not been assigned.`); 1097 1222 } 1098 targetId = symbol.value[symbol.index].content; 1099 const styleTarget = document.getElementById(targetId); 1100 const styles = {}; 1101 styles[command.styleName.content] = styleValue.content; 1102 Object.assign(styleTarget.style, styles); 1223 switch (command.type) { 1224 case 'setStyle': 1225 target.style[command.styleName.content] = styleValue; 1226 break; 1227 case 'setStyles': 1228 target.style.cssText = styleValue; 1229 break; 1230 } 1103 1231 break; 1104 1232 case 'setBodyStyle': 1105 const bodyStyleValue = program. value.evaluate(program,command.styleValue);1233 const bodyStyleValue = program.getValue(command.styleValue); 1106 1234 document.body.style[command.styleName.content] = bodyStyleValue.content; 1107 1235 break; … … 1351 1479 case 'get': 1352 1480 return EasyCoder_Browser.Get; 1353 case 'header':1354 1481 case 'h1': 1482 return EasyCoder_Browser.H1; 1355 1483 case 'h2': 1484 return EasyCoder_Browser.H2; 1356 1485 case 'h3': 1486 return EasyCoder_Browser.H3; 1357 1487 case 'h4': 1488 return EasyCoder_Browser.H4; 1358 1489 case 'h5': 1490 return EasyCoder_Browser.H5; 1359 1491 case 'h6': 1360 return EasyCoder_Browser.H eader;1492 return EasyCoder_Browser.H6; 1361 1493 case 'img': 1362 1494 return EasyCoder_Browser.IMG; … … 1383 1515 case 'put': 1384 1516 return EasyCoder_Browser.Put; 1517 case 'remove': 1518 return EasyCoder_Browser.Remove; 1385 1519 case 'select': 1386 1520 return EasyCoder_Browser.SELECT; … … 1408 1542 const handler = EasyCoder_Browser.getHandler(command.keyword); 1409 1543 if (!handler) { 1410 program.runtimeError(command.lino, 'Unknown keyword \'' + command.keyword 1411 + '\' in \'browser\' package'); 1544 program.runtimeError(command.lino, `Unknown keyword '${command.keyword}' in 'browser' package`); 1412 1545 } 1413 1546 return handler.run(program); … … 1581 1714 domain: 'browser', 1582 1715 type: 'boolean', 1583 content: (typeof window.orientation !== "undefined") 1584 ||(navigator.userAgent.indexOf('IEMobile') !== -1)1716 content: (typeof window.orientation !== "undefined") || 1717 (navigator.userAgent.indexOf('IEMobile') !== -1) 1585 1718 }; 1586 1719 case 'br': … … 1656 1789 let hex = styleValue.toString(16); 1657 1790 while (hex.length < 6) { 1658 hex = '00' + hex;1791 hex = `00${hex}`; 1659 1792 } 1660 1793 return { 1661 1794 type: 'constant', 1662 1795 numeric: false, 1663 content: '#' + hex1796 content: `#${hex}` 1664 1797 }; 1665 1798 break; … … 1705 1838 const style = item.split(':'); 1706 1839 element.setAttribute(style[0], style[1]); 1707 } 1708 ; 1840 }; 1709 1841 } 1710 1842 }; -
easycoder/trunk/plugins/json.js
r1990067 r1996019 338 338 case 200: 339 339 case 201: 340 const loaded = Date.now(); 341 console.log(`${loaded - program.EasyCoder.timestamp} ms: Request completed`); 340 342 if (command.request === 'get') { 341 343 var content = this.responseText; -
easycoder/trunk/plugins/svg.js
r1990067 r1996019 133 133 case 'line': 134 134 case 'rect': 135 case ' text':135 case 'svgtext': 136 136 if (compiler.tokenIs('in')) { 137 137 if (compiler.nextIsSymbol()) { … … 164 164 keyword: 'create', 165 165 lino, 166 type: symbolRecord.keyword ,166 type: symbolRecord.keyword === 'svgtext' ? 'text' : symbolRecord.keyword, 167 167 name: symbolRecord.name, 168 168 style, … … 190 190 symbolRecord.y = 0; 191 191 } else { 192 if (parentRecord.keyword === 'group') { 192 if (parentRecord.keyword === 'group') { 193 193 group = parentRecord; 194 194 // Add this element to the group … … 208 208 const container = document.getElementById(parentRecord.value[parentRecord.index].content); 209 209 const element = document.createElementNS(ns, command.type); 210 symbolRecord.element[symbolRecord.index] = element; 210 211 container.appendChild(element); 211 212 // Set the id 212 213 const id = 'ec-' + symbolRecord.name + '-' + symbolRecord.index; 213 214 element.setAttribute('id', id); 214 if (symbolRecord.keyword === ' text') {215 if (symbolRecord.keyword === 'svgtext') { 215 216 element.textContent = program.value.evaluate(program, command.text).content; 216 217 } … … 238 239 break; 239 240 case 'rect': 240 case ' text':241 case 'svgtext': 241 242 value.x = element.getAttribute('x'); 242 243 value.y = element.getAttribute('y'); … … 340 341 break; 341 342 case 'rect': 342 case ' text':343 case 'svgtext': 343 344 element.setAttribute('x', x); 344 345 element.setAttribute('y', y); … … 353 354 case 'line': 354 355 case 'rect': 355 case ' text':356 case 'svgtext': 356 357 var px = 0; 357 358 var py = 0; … … 379 380 break; 380 381 case 'rect': 381 case ' text':382 case 'svgtext': 382 383 element.setAttribute('x', px + newX); 383 384 element.setAttribute('y', py + newY); … … 426 427 } 427 428 } 428 compiler.addWarning( 'Unrecognised syntax in \'on\'');429 compiler.addWarning(`Unrecognised syntax in 'on'`); 429 430 return false; 430 431 }, … … 507 508 const symbol = compiler.getSymbolRecord(); 508 509 switch (symbol.keyword) { 509 case ' text':510 case 'svgtext': 510 511 if (compiler.nextTokenIs('to')) { 511 512 compiler.next(); … … 546 547 value = program.value.evaluate(program, command.value).content; 547 548 switch (symbol.keyword) { 548 case ' text':549 case 'svgtext': 549 550 target.innerHTML = value; 550 551 break; … … 572 573 }, 573 574 574 Text: {575 576 compile: (compiler) => { 577 const item = compiler.compileVariable('svg', ' text', false, 'dom');575 SVGText: { 576 577 compile: (compiler) => { 578 const item = compiler.compileVariable('svg', 'svgtext', false, 'dom'); 578 579 return true; 579 580 }, … … 608 609 case 'svg': 609 610 return EasyCoder_SVG.SVG; 610 case ' text':611 return EasyCoder_SVG. Text;611 case 'svgtext': 612 return EasyCoder_SVG.SVGText; 612 613 default: 613 614 return false; … … 635 636 const symbolRecord = compiler.getSymbolRecord(); 636 637 compiler.next(); 637 if (symbolRecord.keyword === ' text') {638 if (symbolRecord.keyword === 'svgtext') { 638 639 return { 639 640 domain: 'svg', 640 type: ' text',641 type: 'svgtext', 641 642 name: symbolRecord.name 642 643 }; … … 650 651 get: (program, value) => { 651 652 switch (value.type) { 652 case ' text':653 case 'svgtext': 653 654 const symbolRecord = program.getSymbolRecord(value.name); 654 655 // console.log('symbolRecord: ' + JSON.stringify(symbolRecord.value[symbolRecord.index], null, 2)); -
easycoder/trunk/readme.txt
r1990067 r1996019 50 50 51 51 == Changelog == 52 53 = 2.1.8 16-dec-2018 = 54 * All UI components can be created programmatically. 52 55 53 56 = 2.1.7 09-dec-2018 = -
easycoder/trunk/rest.php
r1990067 r1996019 204 204 $count = $request[1]; 205 205 break; 206 case 2:206 case 3: 207 207 $offset = $request[1]; 208 208 $count = $request[2]; … … 293 293 case 'name': 294 294 // Set by name. If the record does not exist, add it 295 $value = $_POST['value']; 295 header("Content-Type: application/text"); 296 $value = stripslashes(file_get_contents("php://input")); 296 297 $name = $request[2]; 297 298 // See if there's an item with this name
Note: See TracChangeset
for help on using the changeset viewer.