@yokgs/dyescript-light
Version:
Command Line Interface of lightweight (& pre-published) version of @yokgs/DyeScript
114 lines (97 loc) • 3.43 kB
JavaScript
const variable = require("./variable");
function interpreter(code, sharedCollections) {
const { store } = require("../Store/store");
const { DyeInterpreter } = require("../init");
let Store = new store(0, sharedCollections||[]);
for (let i = 0; i < code.length; i++) {
let inst = code[i].map(x => variable(x, Store));
let cmd = inst[0];
let r = inst[1];
switch (cmd) {
case '@':
case 'set':
for (let j = 1; j < inst.length; j += 2) {
Store.set(inst[j], inst[j + 1]);
}
break;
case '!@':
case '!set':
for (let j = 1; j < inst.length; j += 2) {
Store.setDefault(inst[j], inst[j + 1]);
}
break;
case '!type':
Store.setType(r);
break;
case '!endtype':
Store.setType('implicit');
break;
case '#':
case 'collect':
for (let j = 1; j < inst.length; j++) {
Store.createCollection(inst[j]);
}
Store.activate(r);
break;
case '<=':
case 'export':
for (let j = 1; j < inst.length; j++) {
Store.export(inst[j]);
}
break;
case '=>':
case 'read':
for (let j = 1; j < inst.length; j++) {
Store.shared(inst[j]);
}
break;
case '<<':
case 'share':
for (let j = 1; j < inst.length; j++) {
Store.share(inst[j]);
}
break;
case '$':
case 'style':
for (let j = 2; j < inst.length; j += 2) {
inst[j].split(',').map(x => {
Store.storeStyle(r, x, inst[j + 1]);
});
}
break;
case '+':
case 'var':
for (let j = 1; j < inst.length; j += 2) {
Store.setVariable(inst[j], inst[j + 1]);
}
break;
case '.$':
case 'class':
for (let j = 2; j < inst.length; j += 2) {
inst[j].split(',').map(x => {
Store.storeClass(r, x, inst[j + 1]);
});
}
break;
case '@font':
for (let j = 1; j < inst.length; j += 2) {
Store.setFont(inst[j], inst[j + 1], '');
}
break;
case '@@':
case 'import':
let ez = new store(0);
ez = DyeInterpreter(r, Store.collectionsToShare);
Store.extendsStore(ez, inst.slice(2));
break;
default:
if (/\$[\w\-]+/.test(cmd)) {
let cl = cmd.slice(1);
Store.targetStyle(cl, inst.slice(1));
}
break;
}
}
return Store;
}
module.exports.interpreter = interpreter;