New mscript, much easier to read, uses a class
This commit is contained in:
parent
48d3952e3c
commit
5f736c0af4
|
@ -2,49 +2,8 @@
|
||||||
|
|
||||||
/** @module lib/mscript */
|
/** @module lib/mscript */
|
||||||
|
|
||||||
let fs;
|
const BLACK = '0,0,0';
|
||||||
let input;
|
const CMD = [
|
||||||
|
|
||||||
/** object mscript */
|
|
||||||
const mscript = {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check for the presence of specific arguments in process
|
|
||||||
* argv
|
|
||||||
*
|
|
||||||
* @param {string} shrt Short version of argument or flag
|
|
||||||
* @param {string} lng Long version of argument or flag
|
|
||||||
*
|
|
||||||
* @return {boolean} Is flag present
|
|
||||||
*/
|
|
||||||
mscript.arg = function arg (shrt, lng) {
|
|
||||||
if (process.argv.indexOf(shrt) !== -1 ||
|
|
||||||
process.argv.indexOf(lng) !== -1) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check for the position of specific arguments in process
|
|
||||||
* argv
|
|
||||||
*
|
|
||||||
* @param {string} shrt Short version of argument or flag
|
|
||||||
* @param {string} lng Long version of argument or flag
|
|
||||||
*
|
|
||||||
* @return {boolean} Position of arg or flag, for locating input
|
|
||||||
*/
|
|
||||||
mscript.arg_pos = function arg_pos (shrt, lng) {
|
|
||||||
var pos = -1;
|
|
||||||
pos = process.argv.indexOf(shrt);
|
|
||||||
if (pos === -1) {
|
|
||||||
pos = process.argv.indexOf(lng);
|
|
||||||
}
|
|
||||||
return pos;
|
|
||||||
};
|
|
||||||
|
|
||||||
mscript.black = '0,0,0';
|
|
||||||
mscript.cmd = [
|
|
||||||
'CF',
|
'CF',
|
||||||
'PF',
|
'PF',
|
||||||
'BF',
|
'BF',
|
||||||
|
@ -52,10 +11,10 @@ mscript.cmd = [
|
||||||
'PB',
|
'PB',
|
||||||
'BB'
|
'BB'
|
||||||
];
|
];
|
||||||
mscript.alts = {
|
const ALTS = {
|
||||||
'CF' : ['CAMERA FORWARD', 'CAM FORWARD'],
|
'CF' : ['CAMERA FORWARD', 'CAM FORWARD'],
|
||||||
'PF' : ['PROJECTOR FORWARD', 'PROJ FORWARD'],
|
'PF' : ['PROJECTOR FORWARD', 'PROJ FORWARD'],
|
||||||
'BF': ['BLACK FORWARD', 'BLACK', 'BLANK FORWARD', 'BLANK'],
|
'BF' : ['BLACK FORWARD', 'BLACK', 'BLANK FORWARD', 'BLANK'],
|
||||||
'CB' : ['CAMERA BACKWARD', 'CAM BACKWARD', 'CAMERA BACK', 'CAM BACK'],
|
'CB' : ['CAMERA BACKWARD', 'CAM BACKWARD', 'CAMERA BACK', 'CAM BACK'],
|
||||||
'PB' : ['PROJECTOR FORWARD', 'PROJ FORWARD', 'PROJECTOR BACK', 'PROJ BACK'],
|
'PB' : ['PROJECTOR FORWARD', 'PROJ FORWARD', 'PROJECTOR BACK', 'PROJ BACK'],
|
||||||
'BB' : ['BLACK BACKWARD', 'BLACK BACK', 'BLANK BACK'],
|
'BB' : ['BLACK BACKWARD', 'BLACK BACK', 'BLANK BACK'],
|
||||||
|
@ -63,392 +22,318 @@ mscript.alts = {
|
||||||
'F ' : ['FADE']
|
'F ' : ['FADE']
|
||||||
};
|
};
|
||||||
|
|
||||||
mscript.state = {};
|
class Mscript {
|
||||||
|
constructor () {
|
||||||
|
this.output = {};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear the state object
|
* Clear the state of the script
|
||||||
*/
|
*/
|
||||||
mscript.state_clear = function state_clear () {
|
clear () {
|
||||||
mscript.state = {
|
this.cam = 0;
|
||||||
cam : 0,
|
this.proj = 0;
|
||||||
proj : 0,
|
this.color = '';
|
||||||
color : '',
|
this.loops = [];
|
||||||
loops : [],
|
this.rec = -1;
|
||||||
rec : -1
|
this.output = {};
|
||||||
};
|
}
|
||||||
};
|
/**
|
||||||
/**
|
* Main function, accepts multi-line string, parses into lines
|
||||||
*
|
* and interprets the instructions from the text. Returns an array
|
||||||
*/
|
* of steps to be fed into the mcopy.
|
||||||
mscript.alts_unique = function alts_unique () {
|
*/
|
||||||
var ids = Object.keys(mscript.alts),
|
interpret (text, callback) {
|
||||||
all = [];
|
this.clear()
|
||||||
for (var i = 0; i < ids.length; i++) {
|
|
||||||
if (all.indexOf(ids[i]) === -1) {
|
if (typeof text === 'undefined') {
|
||||||
all.push(ids[i]);
|
return this.fail('No input');
|
||||||
} else {
|
|
||||||
mscript.fail("Can't compile");
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
mscript.interpret = function interpret (text, callback) {
|
|
||||||
mscript.state_clear();
|
|
||||||
if (typeof text === 'undefined') {
|
|
||||||
mscript.fail('No input');
|
|
||||||
}
|
|
||||||
var lines = text.split('\n'),
|
|
||||||
two = '',
|
|
||||||
arr = [],
|
|
||||||
light = [],
|
|
||||||
target = 0,
|
|
||||||
dist = 0, //?
|
|
||||||
output = {};
|
|
||||||
for (var i = 0; i < lines.length; i++) {
|
|
||||||
lines[i] = lines[i].replace(/\t+/g, ""); //strip tabs
|
|
||||||
lines[i] = lines[i].trim(); //remove excess whitespace before and after command
|
|
||||||
two = lines[i].substring(0, 2);
|
|
||||||
if (mscript.cmd.indexOf(two) !== -1) {
|
|
||||||
|
|
||||||
if (mscript.state.loops.length > 0) {
|
//split string into lines, each containing a command
|
||||||
//hold generated arr in state loop array
|
let lines = text.split('\n');
|
||||||
mscript.state.loops[mscript.state.rec].arr
|
|
||||||
.push.apply(mscript.state.loops[mscript.state.rec].arr,
|
let two = '';
|
||||||
mscript.str_to_arr(lines[i],
|
|
||||||
two));
|
let arr = [];
|
||||||
mscript.state.loops[mscript.state.rec].light
|
|
||||||
.push.apply(mscript.state.loops[mscript.state.rec].light,
|
let light = [];
|
||||||
mscript.light_to_arr(lines[i],
|
|
||||||
two));
|
let target = 0;// move to target using CAM # or PROJ #
|
||||||
} else {
|
|
||||||
arr.push.apply(arr, mscript.str_to_arr(lines[i], two));
|
let dist = 0; //?
|
||||||
light.push.apply(light, mscript.light_to_arr(lines[i], two))
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (lines[i].substring(0, 4) === 'LOOP') {
|
for (let line of lines) {
|
||||||
mscript.state.rec++;
|
line = line.replace(/\t+/g, ""); //strip tabs
|
||||||
mscript.state.loops[mscript.state.rec] = {
|
line = line.trim(); //remove excess whitespace before and after command
|
||||||
arr : [],
|
two = line.substring(0, 2);
|
||||||
light : [],
|
if (CMD.indexOf(two) !== -1) {
|
||||||
cam : 0,
|
|
||||||
proj : 0,
|
if (this.loops.length > 0) {
|
||||||
cmd : lines[i] + ''
|
//hold generated arr in state loop array
|
||||||
};
|
this.loops[this.rec].arr
|
||||||
} else if (lines[i].substring(0, 2) === 'L ') {
|
.push.apply(this.loops[this.rec].arr,
|
||||||
mscript.light_state(lines[i]);
|
this.str_to_arr(line,
|
||||||
} else if (lines[i].substring(0, 3) === 'END') {
|
two));
|
||||||
for (var x = 0; x < mscript.loop_count(mscript.state.loops[mscript.state.rec].cmd); x++) {
|
this.loops[this.rec].light
|
||||||
if (mscript.state.rec === 0) {
|
.push.apply(this.loops[this.rec].light,
|
||||||
arr.push.apply(arr, mscript.state.loops[mscript.state.rec].arr);
|
this.light_to_arr(line,
|
||||||
light.push.apply(light, mscript.state.loops[mscript.state.rec].light);
|
two));
|
||||||
} else if (mscript.state.rec >= 1) {
|
|
||||||
mscript.state.loops[mscript.state.rec - 1].arr
|
|
||||||
.push.apply(mscript.state.loops[mscript.state.rec - 1].arr,
|
|
||||||
mscript.state.loops[mscript.state.rec].arr);
|
|
||||||
mscript.state.loops[mscript.state.rec - 1].light
|
|
||||||
.push.apply(mscript.state.loops[mscript.state.rec - 1].light,
|
|
||||||
mscript.state.loops[mscript.state.rec].light);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mscript.state_update('END', mscript.loop_count(mscript.state.loops[mscript.state.rec].cmd));
|
|
||||||
delete mscript.state.loops[mscript.state.rec];
|
|
||||||
mscript.state.rec--;
|
|
||||||
} else if (lines[i].substring(0, 3) === 'CAM') { //directly go to that frame (black?)
|
|
||||||
target = parseInt(lines[i].split('CAM ')[1]);
|
|
||||||
if (mscript.state.loops.length > 0) {
|
|
||||||
if (target > mscript.state.cam) {
|
|
||||||
dist = target - mscript.state.cam;
|
|
||||||
for (var x = 0; x < dist; x++) {
|
|
||||||
mscript.state.loops[mscript.state.rec].arr.push('BF');
|
|
||||||
mscript.state.loops[mscript.state.rec].light.push(mscript.black);
|
|
||||||
mscript.state_update('BF');
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
dist = mscript.state.cam - target;
|
arr.push.apply(arr, this.str_to_arr(line, two));
|
||||||
for (var x = 0; x < dist; x++) {
|
light.push.apply(light, this.light_to_arr(line, two))
|
||||||
mscript.state.loops[mscript.state.rec].arr.push('BB');
|
}
|
||||||
mscript.state.loops[mscript.state.rec].light.push(mscript.black);
|
|
||||||
mscript.state_update('BB');
|
} else if (line.substring(0, 4) === 'LOOP') {
|
||||||
|
this.rec++;
|
||||||
|
this.loops[this.rec] = {
|
||||||
|
arr : [],
|
||||||
|
light : [],
|
||||||
|
cam : 0,
|
||||||
|
proj : 0,
|
||||||
|
cmd : line + ''
|
||||||
|
};
|
||||||
|
} else if (line.substring(0, 2) === 'L ') {
|
||||||
|
this.light_state(line);
|
||||||
|
} else if (line.substring(0, 3) === 'END') {
|
||||||
|
for (var x = 0; x < this.loop_count(this.loops[this.rec].cmd); x++) {
|
||||||
|
if (this.rec === 0) {
|
||||||
|
arr.push.apply(arr, this.loops[this.rec].arr);
|
||||||
|
light.push.apply(light, this.loops[this.rec].light);
|
||||||
|
} else if (this.rec >= 1) {
|
||||||
|
this.loops[this.rec - 1].arr
|
||||||
|
.push.apply(this.loops[this.rec - 1].arr,
|
||||||
|
this.loops[this.rec].arr);
|
||||||
|
this.loops[this.rec - 1].light
|
||||||
|
.push.apply(this.loops[this.rec - 1].light,
|
||||||
|
this.loops[this.rec].light);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
this.update('END', this.loop_count(this.loops[this.rec].cmd));
|
||||||
if (target > mscript.state.cam) {
|
delete this.loops[this.rec];
|
||||||
dist = target - mscript.state.cam;
|
this.rec--;
|
||||||
for (var x = 0; x < dist; x++) {
|
} else if (line.substring(0, 3) === 'CAM') { //directly go to that frame (black?)
|
||||||
arr.push('BF');
|
target = parseInt(line.split('CAM ')[1]);
|
||||||
light.push(mscript.black);
|
if (this.loops.length > 0) {
|
||||||
mscript.state_update('BF');
|
if (target > this.cam) {
|
||||||
}
|
dist = target - this.cam;
|
||||||
|
for (var x = 0; x < dist; x++) {
|
||||||
|
this.loops[this.rec].arr.push('BF');
|
||||||
|
this.loops[this.rec].light.push(BLACK);
|
||||||
|
this.update('BF');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dist = this.cam - target;
|
||||||
|
for (var x = 0; x < dist; x++) {
|
||||||
|
this.loops[this.rec].arr.push('BB');
|
||||||
|
this.loops[this.rec].light.push(BLACK);
|
||||||
|
this.update('BB');
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
dist = mscript.state.cam - target;
|
if (target > this.cam) {
|
||||||
for (var x = 0; x < dist; x++) {
|
dist = target - this.cam;
|
||||||
arr.push('BB');
|
for (var x = 0; x < dist; x++) {
|
||||||
light.push(mscript.black);
|
arr.push('BF');
|
||||||
mscript.state_update('BB');
|
light.push(BLACK);
|
||||||
|
this.update('BF');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dist = this.cam - target;
|
||||||
|
for (var x = 0; x < dist; x++) {
|
||||||
|
arr.push('BB');
|
||||||
|
light.push(BLACK);
|
||||||
|
this.update('BB');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else if (line.substring(0, 4) === 'PROJ') { //directly go to that frame
|
||||||
} else if (lines[i].substring(0, 4) === 'PROJ') { //directly go to that frame
|
target = parseInt(line.split('PROJ ')[1]);
|
||||||
target = parseInt(lines[i].split('PROJ ')[1]);
|
if (this.loops.length > 0) {
|
||||||
if (mscript.state.loops.length > 0) {
|
if (target > this.proj) {
|
||||||
if (target > mscript.state.proj) {
|
dist = target - this.proj;
|
||||||
dist = target - mscript.state.proj;
|
for (var x = 0; x < dist; x++) {
|
||||||
for (var x = 0; x < dist; x++) {
|
this.loops[this.rec].arr.push('PF');
|
||||||
mscript.state.loops[mscript.state.rec].arr.push('PF');
|
this.loops[this.rec].light.push('');
|
||||||
mscript.state.loops[mscript.state.rec].light.push('');
|
this.update('PF');
|
||||||
mscript.state_update('PF');
|
}
|
||||||
}
|
} else {
|
||||||
|
dist = this.proj - target;
|
||||||
|
for (var x = 0; x < dist; x++) {
|
||||||
|
this.loops[this.rec].arr.push('PB');
|
||||||
|
this.loops[this.rec].light.push('');
|
||||||
|
this.update('PB');
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
dist = mscript.state.proj - target;
|
if (target > this.proj) {
|
||||||
for (var x = 0; x < dist; x++) {
|
dist = target - this.proj;
|
||||||
mscript.state.loops[mscript.state.rec].arr.push('PB');
|
for (var x = 0; x < dist; x++) {
|
||||||
mscript.state.loops[mscript.state.rec].light.push('');
|
arr.push('PF');
|
||||||
mscript.state_update('PB');
|
light.push('');
|
||||||
}
|
this.update('PF');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dist = this.proj - target;
|
||||||
|
for (var x = 0; x < dist; x++) {
|
||||||
|
arr.push('PB');
|
||||||
|
light.push('');
|
||||||
|
this.update('PB');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else if (line.substring(0, 3) === 'SET') { //set that state
|
||||||
|
if (line.substring(0, 7) === 'SET CAM') {
|
||||||
|
this.cam = parseInt(line.split('SET CAM')[1]);
|
||||||
|
} else if (line.substring(0, 8) === 'SET PROJ') {
|
||||||
|
this.proj = parseInt(line.split('SET PROJ')[1]);
|
||||||
|
}
|
||||||
|
} else if (line.substring(0, 1) === '#' || line.substring(0, 2) === '//') {
|
||||||
|
//comments
|
||||||
|
//ignore while parsing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
this.output.success = true;
|
||||||
|
this.output.arr = arr; //all instructions
|
||||||
|
this.output.light = light; //all light instructions
|
||||||
|
this.output.cam = this.cam;
|
||||||
|
this.output.proj = this.proj;
|
||||||
|
|
||||||
|
|
||||||
|
if (typeof callback !== 'undefined') {
|
||||||
|
//should only be invoked by running mscript.tests()
|
||||||
|
callback(this.output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
last_loop () {
|
||||||
|
return this.loops[this.loops.length - 1];
|
||||||
|
}
|
||||||
|
parent_loop () {
|
||||||
|
return this.loops[this.loops.length - 2];
|
||||||
|
}
|
||||||
|
loop_count (str) {
|
||||||
|
return parseInt(str.split(' ')[1]);
|
||||||
|
}
|
||||||
|
fade_count (str) {
|
||||||
|
return parseInt(str.split(' ')[1]);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Increase the state of a specific object, such as the camera/projector,
|
||||||
|
* by the value defined in val
|
||||||
|
*/
|
||||||
|
update (cmd, val = 1) {
|
||||||
|
if (cmd === 'END') {
|
||||||
|
//I don't understand this loop
|
||||||
|
for (let i = 0; i < val; i++) {
|
||||||
|
if (this.rec === 0) {
|
||||||
|
this.cam += this.loops[this.rec].cam;
|
||||||
|
this.proj += this.loops[this.rec].proj;
|
||||||
|
} else if (this.rec >= 1) {
|
||||||
|
this.loops[this.rec - 1].cam += this.loops[this.rec].cam;
|
||||||
|
this.loops[this.rec - 1].proj += this.loops[this.rec].proj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (cmd === 'CF') {
|
||||||
|
if (this.loops.length < 1) {
|
||||||
|
this.cam += val;
|
||||||
} else {
|
} else {
|
||||||
if (target > mscript.state.proj) {
|
this.loops[this.rec].cam += val;
|
||||||
dist = target - mscript.state.proj;
|
|
||||||
for (var x = 0; x < dist; x++) {
|
|
||||||
arr.push('PF');
|
|
||||||
light.push('');
|
|
||||||
mscript.state_update('PF');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dist = mscript.state.proj - target;
|
|
||||||
for (var x = 0; x < dist; x++) {
|
|
||||||
arr.push('PB');
|
|
||||||
light.push('');
|
|
||||||
mscript.state_update('PB');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (lines[i].substring(0, 3) === 'SET') { //set that state
|
} else if (cmd === 'CB') {
|
||||||
if (lines[i].substring(0, 7) === 'SET CAM') {
|
if (this.loops.length < 1) {
|
||||||
mscript.state.cam = parseInt(lines[i].split('SET CAM')[1]);
|
this.cam -= val;
|
||||||
} else if (lines[i].substring(0, 8) === 'SET PROJ') {
|
} else {
|
||||||
mscript.state.proj = parseInt(lines[i].split('SET PROJ')[1]);
|
this.loops[this.rec].cam--;
|
||||||
}
|
}
|
||||||
} else if (lines[i].substring(0, 1) === '#' || lines[i].substring(0, 2) === '//') {
|
} else if (cmd === 'PF') {
|
||||||
//comments
|
if (this.loops.length < 1) {
|
||||||
//ignore while parsing
|
this.proj += val;
|
||||||
}
|
} else {
|
||||||
}
|
this.loops[this.rec].proj += val;
|
||||||
output.success = true;
|
}
|
||||||
output.arr = arr;
|
} else if (cmd === 'PB') {
|
||||||
output.light = light;
|
if (this.loops.length < 1) {
|
||||||
output.cam = mscript.state.cam;
|
this.proj -= val;
|
||||||
output.proj = mscript.state.proj;
|
} else {
|
||||||
if (typeof callback !== 'undefined') {
|
this.loops[this.rec].proj--;
|
||||||
//should only be invoked by running mscript.tests()
|
}
|
||||||
callback(output);
|
} else if (cmd === 'BF') {
|
||||||
} else {
|
if (this.loops.length < 1) {
|
||||||
return mscript.output(output);
|
this.cam += val;
|
||||||
}
|
} else {
|
||||||
};
|
this.loops[this.rec].cam += val;
|
||||||
/**
|
}
|
||||||
*
|
} else if (cmd === 'BB') {
|
||||||
*/
|
if (this.loops.length < 1) {
|
||||||
mscript.last_loop = function last_loop () {
|
this.cam -= val;
|
||||||
return mscript.state.loops[mscript.state.loops.length - 1];
|
} else {
|
||||||
};
|
this.loops[this.rec].cam -= val;
|
||||||
/**
|
}
|
||||||
*
|
} else if (cmd === 'L ') {
|
||||||
*/
|
|
||||||
mscript.parent_loop = function parent_loop () {
|
|
||||||
return mscript.state.loops[mscript.state.loops.length - 2];
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
mscript.state_update = function state_update (cmd, val) {
|
|
||||||
if (cmd === 'END') {
|
|
||||||
for (var i = 0; i < val; i++) {
|
|
||||||
if (mscript.state.rec === 0) {
|
|
||||||
mscript.state.cam += mscript.state.loops[mscript.state.rec].cam;
|
|
||||||
mscript.state.proj += mscript.state.loops[mscript.state.rec].proj;
|
|
||||||
} else if (mscript.state.rec >= 1) {
|
|
||||||
mscript.state.loops[mscript.state.rec - 1].cam += mscript.state.loops[mscript.state.rec].cam;
|
|
||||||
mscript.state.loops[mscript.state.rec - 1].proj += mscript.state.loops[mscript.state.rec].proj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (cmd === 'CF') {
|
|
||||||
if (mscript.state.loops.length < 1) {
|
|
||||||
mscript.state.cam++;
|
|
||||||
} else {
|
|
||||||
mscript.state.loops[mscript.state.rec].cam++;
|
|
||||||
}
|
|
||||||
} else if (cmd === 'CB') {
|
|
||||||
if (mscript.state.loops.length < 1) {
|
|
||||||
mscript.state.cam--;
|
|
||||||
} else {
|
|
||||||
mscript.state.loops[mscript.state.rec].cam--;
|
|
||||||
}
|
|
||||||
} else if (cmd === 'PF') {
|
|
||||||
if (mscript.state.loops.length < 1) {
|
|
||||||
mscript.state.proj++;
|
|
||||||
} else {
|
|
||||||
mscript.state.loops[mscript.state.rec].proj++;
|
|
||||||
}
|
|
||||||
} else if (cmd === 'PB') {
|
|
||||||
if (mscript.state.loops.length < 1) {
|
|
||||||
mscript.state.proj--;
|
|
||||||
} else {
|
|
||||||
mscript.state.loops[mscript.state.rec].proj--;
|
|
||||||
}
|
|
||||||
} else if (cmd === 'BF') {
|
|
||||||
if (mscript.state.loops.length < 1) {
|
|
||||||
mscript.state.cam++;
|
|
||||||
} else {
|
|
||||||
mscript.state.loops[mscript.state.rec].cam++;
|
|
||||||
}
|
|
||||||
} else if (cmd === 'BB') {
|
|
||||||
if (mscript.state.loops.length < 1) {
|
|
||||||
mscript.state.cam--;
|
|
||||||
} else {
|
|
||||||
mscript.state.loops[mscript.state.rec].cam++;
|
|
||||||
}
|
|
||||||
} else if (cmd === 'L ') {
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
mscript.str_to_arr = function str_to_arr (str, cmd) {
|
|
||||||
var cnt = str.split(cmd),
|
|
||||||
c = parseInt(cnt[1]),
|
|
||||||
arr = [];
|
|
||||||
if (cnt[1] === '') {
|
|
||||||
c = 1;
|
|
||||||
} else {
|
|
||||||
c = parseInt(cnt[1]);
|
|
||||||
}
|
|
||||||
for (var i = 0; i < c; i++) {
|
|
||||||
arr.push(cmd);
|
|
||||||
mscript.state_update(cmd);
|
|
||||||
}
|
|
||||||
return arr;
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
mscript.light_state = function light_state (str) {
|
|
||||||
//add parsers for other color spaces
|
|
||||||
var color = str.replace('L ', '').trim();
|
|
||||||
mscript.state.color = color;
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
mscript.light_to_arr = function light_to_arr (str, cmd) {
|
|
||||||
var cnt = str.split(cmd),
|
|
||||||
c = parseInt(cnt[1]),
|
|
||||||
arr = [];
|
|
||||||
if (cnt[1] === '') {
|
|
||||||
c = 1;
|
|
||||||
} else {
|
|
||||||
c = parseInt(cnt[1]);
|
|
||||||
}
|
|
||||||
for (var i = 0; i < c; i++) {
|
|
||||||
if (cmd === 'CF'
|
|
||||||
|| cmd === 'CB') {
|
|
||||||
arr.push(mscript.state.color);
|
|
||||||
} else if (cmd === 'BF'
|
|
||||||
|| cmd === 'BB') {
|
|
||||||
arr.push(mscript.black);
|
|
||||||
} else {
|
|
||||||
arr.push('');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return arr;
|
/**
|
||||||
};
|
* Split string on command, extract any integers from string
|
||||||
/**
|
*/
|
||||||
*
|
str_to_arr (str, cmd) {
|
||||||
*/
|
const cnt = str.split(cmd);
|
||||||
mscript.loop_count = function loop_count (str) {
|
let c = parseInt(cnt[1]);
|
||||||
return parseInt(str.split(' ')[1]);
|
let arr = [];
|
||||||
};
|
if (cnt[1] === '') {
|
||||||
mscript.fade_count = function fade_count (str) {
|
c = 1;
|
||||||
return parseInt(str.split(' ')[1]);
|
} else {
|
||||||
|
c = parseInt(cnt[1]);
|
||||||
|
}
|
||||||
|
arr = new Array(c).fill(cmd);
|
||||||
|
this.update(cmd, c);
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
light_to_arr (str, cmd) {
|
||||||
|
const cnt = str.split(cmd);
|
||||||
|
let c = parseInt(cnt[1]);
|
||||||
|
let arr = [];
|
||||||
|
if (cnt[1] === '') {
|
||||||
|
c = 1;
|
||||||
|
} else {
|
||||||
|
c = parseInt(cnt[1]);
|
||||||
|
}
|
||||||
|
for (var i = 0; i < c; i++) {
|
||||||
|
if (cmd === 'CF'
|
||||||
|
|| cmd === 'CB') {
|
||||||
|
arr.push(this.color);
|
||||||
|
} else if (cmd === 'BF'
|
||||||
|
|| cmd === 'BB') {
|
||||||
|
arr.push(BLACK);
|
||||||
|
} else {
|
||||||
|
arr.push('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
light_state (str) {
|
||||||
|
//add parsers for other color spaces
|
||||||
|
const color = str.replace('L ', '').trim();
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
fail (msg) {
|
||||||
|
throw new Error(msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
mscript.fail = function fail (reason) {
|
|
||||||
console.error(JSON.stringify({success: false, error: true, msg : reason}));
|
|
||||||
if (process) process.exit();
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
mscript.output = function output (data) {
|
|
||||||
var json = true; //default
|
|
||||||
if (mscript.arg('-j', '--json')) {
|
|
||||||
json = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mscript.arg('-t', '--text')) {
|
module.exports = Mscript;
|
||||||
json = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (json) {
|
|
||||||
console.log(JSON.stringify(data));
|
|
||||||
} else {
|
|
||||||
var ids = Object.keys(data);
|
|
||||||
for (var i = 0; i < ids.length; i++) {
|
|
||||||
console.log(ids[i] + ': ' + data[ids[i]]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
mscript.init = function init () {
|
|
||||||
if (mscript.arg('-t', '--tests')) {
|
|
||||||
return mscript.tests();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mscript.arg('-v', '--verbose')) {
|
|
||||||
console.time('mscript');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mscript.arg('-c', '--cam')) {
|
|
||||||
mscript.state.cam = parseInt(process.argv[mscript.arg_pos('-c', '--cam') + 1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mscript.arg('-p', '--proj')) {
|
|
||||||
mscript.state.proj = parseInt(process.argv[mscript.arg_pos('-p', '--proj') + 1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mscript.arg('-f', '--file')) {
|
|
||||||
input = process.argv[mscript.arg_pos('-f', '--file') + 1];
|
|
||||||
mscript.interpret(fs.readFileSync(input, 'utf8'));
|
|
||||||
} else {
|
|
||||||
mscript.interpret(input);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mscript.arg('-v', '--verbose')) {
|
|
||||||
console.timeEnd('mscript');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (typeof document === 'undefined'
|
|
||||||
&& typeof module !== 'undefined'
|
|
||||||
&& !module.parent) {
|
|
||||||
//node script
|
|
||||||
fs = require('fs');
|
|
||||||
input = process.argv[2];
|
|
||||||
mscript.init();
|
|
||||||
} else if (typeof module !== 'undefined' && module.parent) {
|
|
||||||
//module
|
|
||||||
fs = require('fs');
|
|
||||||
module.exports = mscript;
|
|
||||||
} else {
|
|
||||||
//web
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue