Add jsdoc comments to remaining methods.

This commit is contained in:
mmcwilliams 2019-07-26 18:12:06 -04:00
parent 0b2d386ca2
commit 07100a588c
14 changed files with 355 additions and 62 deletions

View File

@ -41,6 +41,10 @@ function startsWith(str, target, position) {
} }
/** class Mscript */ /** class Mscript */
class Mscript { class Mscript {
/**
* @constructor
* Create new Mscript interpreter
**/
constructor() { constructor() {
this.output = {}; this.output = {};
} }
@ -65,12 +69,12 @@ class Mscript {
/** /**
* Main function, accepts multi-line string, parses into lines * Main function, accepts multi-line string, parses into lines
* and interprets the instructions from the text. Returns an array * and interprets the instructions from the text. Returns an array
* of steps to be fed into the mcopy. * of steps to be fed into the mcopy sequence.
* *
* @param text {string} Mscript text to interpret * @param {string} text Mscript text to interpret
* @param callback {function} Function to call when string is interpreted * @param {function} callback Function to call when string is interpreted
* *
* returns {object} if callback is not provided * @returns {object} if callback is not provided
*/ */
interpret(text, callback) { interpret(text, callback) {
this.clear(); this.clear();
@ -118,6 +122,10 @@ class Mscript {
//comments //comments
//ignore while parsing //ignore while parsing
} }
else if (startsWith(line, 'ALERT')) {
}
else if (startsWith(line, 'PAUSE')) {
}
} }
this.output.success = true; this.output.success = true;
this.output.arr = this.arr; //all instructions this.output.arr = this.arr; //all instructions
@ -132,6 +140,13 @@ class Mscript {
return this.output; return this.output;
} }
} }
/**
* Interprets variables for complex sequence behavior.
* TODO: Fully implement, add test coverage
*
* @param {string} line Line containing a variable assignment
*
**/
variable(line) { variable(line) {
let parts = line.split('='); let parts = line.split('=');
let key = parts[0]; let key = parts[0];
@ -164,12 +179,21 @@ class Mscript {
} }
//console.dir(this.variables) //console.dir(this.variables)
} }
/**
* Replace variable with value at time of interpretation
* TODO: Implement this please
*
* @param {string} line Line containing variable to be replaced with value
*
* @returns {string} New string to be interpreted
**/
variable_replace(line) { variable_replace(line) {
return line;
} }
/** /**
* Interpret a basic two character command * Interpret a basic two character command
* *
* @param line {string} Line of script to interpret * @param {string} line Line of script to interpret
*/ */
basic_cmd(line) { basic_cmd(line) {
if (this.rec !== -1) { if (this.rec !== -1) {
@ -187,8 +211,8 @@ class Mscript {
/** /**
* Start a new loop * Start a new loop
* *
* @param line {string} Line to evaluate as either loop or fade * @param {string} line Line to evaluate as either loop or fade
* @param fade {boolean} Flag as boolean if true * @param {boolean} fade Flag as boolean if true
*/ */
new_loop(line, fade) { new_loop(line, fade) {
this.rec++; this.rec++;
@ -206,7 +230,7 @@ class Mscript {
/** /**
* Close the most recent loop * Close the most recent loop
* *
* @param line {string} Line to interpret * @param {string} line Line to interpret
*/ */
end_loop(line) { end_loop(line) {
let light_arr; let light_arr;
@ -241,7 +265,7 @@ class Mscript {
/** /**
* Move camera to explicitly-defined frame * Move camera to explicitly-defined frame
* *
* @param line {string} Line to interpret with camera move statement * @param {string} line Line to interpret with camera move statement
*/ */
move_cam(line) { move_cam(line) {
this.target = parseInt(line.split('CAM ')[1]); this.target = parseInt(line.split('CAM ')[1]);
@ -284,6 +308,8 @@ class Mscript {
} }
/** /**
* Move projector to explicitly-defined frame * Move projector to explicitly-defined frame
*
* @param {string} line Line containing `move` statement to interpret
*/ */
move_proj(line) { move_proj(line) {
this.target = parseInt(line.split('PROJ ')[1]); this.target = parseInt(line.split('PROJ ')[1]);
@ -326,6 +352,8 @@ class Mscript {
} }
/** /**
* Set the state of either the cam or projector * Set the state of either the cam or projector
*
* @param line {string} String containing set statement
*/ */
set_state(line) { set_state(line) {
if (startsWith(line, 'SET CAM')) { if (startsWith(line, 'SET CAM')) {
@ -337,24 +365,32 @@ class Mscript {
} }
/** /**
* Return the last loop * Return the last loop
*
* @returns {object}
*/ */
last_loop() { last_loop() {
return this.loops[this.loops.length - 1]; return this.loops[this.loops.length - 1];
} }
/** /**
* Return the second-last loop * Return the second-last loop
*
* @returns {object} Loop array
*/ */
parent_loop() { parent_loop() {
return this.loops[this.loops.length - 2]; return this.loops[this.loops.length - 2];
} }
/** /**
* Extract the loop count integer from a LOOP cmd * Extract the loop count integer from a LOOP cmd
*
* @returns {integer} Loop count in string parsed into integer
*/ */
loop_count(str) { loop_count(str) {
return parseInt(str.split(' ')[1]); return parseInt(str.split(' ')[1]);
} }
/** /**
* Execute a fade of frame length, from color to another color * Execute a fade of frame length, from color to another color
*
* @param {string} line Line containing a fade initiator
*/ */
fade(line) { fade(line) {
let len = this.fade_count(line); let len = this.fade_count(line);
@ -368,12 +404,18 @@ class Mscript {
} }
/** /**
* Extract the fade length integer from a FADE cmd * Extract the fade length integer from a FADE cmd
*
* @param {string} str Line containing the length of fade in frames
*/ */
fade_count(str) { fade_count(str) {
return parseInt(str.split(' ')[1]); return parseInt(str.split(' ')[1]);
} }
/** /**
* Extract the start color from a string * Extract the start color from a string
*
* @param {string} str Line containing the start color value in a fade initiator
*
* @returns {array} Array containing RGB color values
*/ */
fade_start(str) { fade_start(str) {
let color = str.split(' ')[2]; let color = str.split(' ')[2];
@ -381,6 +423,10 @@ class Mscript {
} }
/** /**
* Extract the end color from a string * Extract the end color from a string
*
* @param {string} str Line containing the end color value in a fade initiator
*
* @returns {array} Array containing RGB color values
*/ */
fade_end(str) { fade_end(str) {
let color = str.split(' ')[3]; let color = str.split(' ')[3];
@ -404,6 +450,11 @@ class Mscript {
} }
return this.rgb_str(cur); return this.rgb_str(cur);
} }
/**
* Parse string into array of RGB color values. 0-255 octet.
*
* @param {string} str String containing only color values as `#,#,#`
**/
rgb(str) { rgb(str) {
let rgb = str.split(','); let rgb = str.split(',');
return rgb.map((char) => { return rgb.map((char) => {
@ -411,14 +462,20 @@ class Mscript {
}); });
} }
/** /**
* Cast RGB color values as string
* *
* @param {array} arr Array to join into string
*
* @returns {string} String of RGB values
**/ **/
rgb_str(arr) { rgb_str(arr) {
return arr.join(','); return arr.join(',');
} }
/** /**
* Increase the state of a specific object, such as the camera/projector, * Increase the state of a specific object, such as the camera/projector,
* by the value defined in val * by the value defined in val.
*
* @param {string} cmd String representing command to interpret and update state
*/ */
update(cmd, val = 1) { update(cmd, val = 1) {
if (cmd === 'END') { if (cmd === 'END') {
@ -486,7 +543,13 @@ class Mscript {
} }
} }
/** /**
* Split string on command, extract any integers from string * Split string on command, turn into array of commands
* as long as count variable. Default 1.
*
* @param {string} str String to split
* @param {string} cmd String representing command to split at
*
* @returns {array} Array containing commands
*/ */
str_to_arr(str, cmd) { str_to_arr(str, cmd) {
const cnt = str.split(cmd); const cnt = str.split(cmd);
@ -504,6 +567,11 @@ class Mscript {
} }
/** /**
* Split a string on a command to extract data for light array * Split a string on a command to extract data for light array
*
* @param {string} str String containing light command
* @param {string} cmd String representing command
*
* @returns {array} An RGB array containing the color values
*/ */
light_to_arr(str, cmd) { light_to_arr(str, cmd) {
const cnt = str.split(cmd); const cnt = str.split(cmd);
@ -532,6 +600,8 @@ class Mscript {
} }
/** /**
* Split a string to extract an rgb color value * Split a string to extract an rgb color value
*
* @param {string} Color string assign to color property
*/ */
light_state(str) { light_state(str) {
//add parsers for other color spaces //add parsers for other color spaces
@ -541,7 +611,7 @@ class Mscript {
/** /**
* Throw an error with specific message * Throw an error with specific message
* *
* @param msg {string} Error message to print * @param {string} msg Error message to print
*/ */
fail(msg) { fail(msg) {
throw new Error(msg); throw new Error(msg);

File diff suppressed because one or more lines are too long

View File

@ -10,6 +10,8 @@ const exec_1 = require("exec");
* --help flag. If they do not exist, log to console * --help flag. If they do not exist, log to console
* *
* @param {string} platform Operating system type * @param {string} platform Operating system type
*
* @returns {object} Object containing path to dependency from `which`, if they exist
**/ **/
async function dependencies(platform) { async function dependencies(platform) {
let obj = {}; let obj = {};

View File

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system/index.ts"],"names":[],"mappings":"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"} {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system/index.ts"],"names":[],"mappings":"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"}

View File

@ -41,6 +41,10 @@ function startsWith(str, target, position) {
} }
/** class Mscript */ /** class Mscript */
class Mscript { class Mscript {
/**
* @constructor
* Create new Mscript interpreter
**/
constructor() { constructor() {
this.output = {}; this.output = {};
} }
@ -65,12 +69,12 @@ class Mscript {
/** /**
* Main function, accepts multi-line string, parses into lines * Main function, accepts multi-line string, parses into lines
* and interprets the instructions from the text. Returns an array * and interprets the instructions from the text. Returns an array
* of steps to be fed into the mcopy. * of steps to be fed into the mcopy sequence.
* *
* @param text {string} Mscript text to interpret * @param {string} text Mscript text to interpret
* @param callback {function} Function to call when string is interpreted * @param {function} callback Function to call when string is interpreted
* *
* returns {object} if callback is not provided * @returns {object} if callback is not provided
*/ */
interpret(text, callback) { interpret(text, callback) {
this.clear(); this.clear();
@ -118,6 +122,10 @@ class Mscript {
//comments //comments
//ignore while parsing //ignore while parsing
} }
else if (startsWith(line, 'ALERT')) {
}
else if (startsWith(line, 'PAUSE')) {
}
} }
this.output.success = true; this.output.success = true;
this.output.arr = this.arr; //all instructions this.output.arr = this.arr; //all instructions
@ -132,6 +140,13 @@ class Mscript {
return this.output; return this.output;
} }
} }
/**
* Interprets variables for complex sequence behavior.
* TODO: Fully implement, add test coverage
*
* @param {string} line Line containing a variable assignment
*
**/
variable(line) { variable(line) {
let parts = line.split('='); let parts = line.split('=');
let key = parts[0]; let key = parts[0];
@ -164,12 +179,21 @@ class Mscript {
} }
//console.dir(this.variables) //console.dir(this.variables)
} }
/**
* Replace variable with value at time of interpretation
* TODO: Implement this please
*
* @param {string} line Line containing variable to be replaced with value
*
* @returns {string} New string to be interpreted
**/
variable_replace(line) { variable_replace(line) {
return line;
} }
/** /**
* Interpret a basic two character command * Interpret a basic two character command
* *
* @param line {string} Line of script to interpret * @param {string} line Line of script to interpret
*/ */
basic_cmd(line) { basic_cmd(line) {
if (this.rec !== -1) { if (this.rec !== -1) {
@ -187,8 +211,8 @@ class Mscript {
/** /**
* Start a new loop * Start a new loop
* *
* @param line {string} Line to evaluate as either loop or fade * @param {string} line Line to evaluate as either loop or fade
* @param fade {boolean} Flag as boolean if true * @param {boolean} fade Flag as boolean if true
*/ */
new_loop(line, fade) { new_loop(line, fade) {
this.rec++; this.rec++;
@ -206,7 +230,7 @@ class Mscript {
/** /**
* Close the most recent loop * Close the most recent loop
* *
* @param line {string} Line to interpret * @param {string} line Line to interpret
*/ */
end_loop(line) { end_loop(line) {
let light_arr; let light_arr;
@ -241,7 +265,7 @@ class Mscript {
/** /**
* Move camera to explicitly-defined frame * Move camera to explicitly-defined frame
* *
* @param line {string} Line to interpret with camera move statement * @param {string} line Line to interpret with camera move statement
*/ */
move_cam(line) { move_cam(line) {
this.target = parseInt(line.split('CAM ')[1]); this.target = parseInt(line.split('CAM ')[1]);
@ -284,6 +308,8 @@ class Mscript {
} }
/** /**
* Move projector to explicitly-defined frame * Move projector to explicitly-defined frame
*
* @param {string} line Line containing `move` statement to interpret
*/ */
move_proj(line) { move_proj(line) {
this.target = parseInt(line.split('PROJ ')[1]); this.target = parseInt(line.split('PROJ ')[1]);
@ -326,6 +352,8 @@ class Mscript {
} }
/** /**
* Set the state of either the cam or projector * Set the state of either the cam or projector
*
* @param line {string} String containing set statement
*/ */
set_state(line) { set_state(line) {
if (startsWith(line, 'SET CAM')) { if (startsWith(line, 'SET CAM')) {
@ -337,24 +365,32 @@ class Mscript {
} }
/** /**
* Return the last loop * Return the last loop
*
* @returns {object}
*/ */
last_loop() { last_loop() {
return this.loops[this.loops.length - 1]; return this.loops[this.loops.length - 1];
} }
/** /**
* Return the second-last loop * Return the second-last loop
*
* @returns {object} Loop array
*/ */
parent_loop() { parent_loop() {
return this.loops[this.loops.length - 2]; return this.loops[this.loops.length - 2];
} }
/** /**
* Extract the loop count integer from a LOOP cmd * Extract the loop count integer from a LOOP cmd
*
* @returns {integer} Loop count in string parsed into integer
*/ */
loop_count(str) { loop_count(str) {
return parseInt(str.split(' ')[1]); return parseInt(str.split(' ')[1]);
} }
/** /**
* Execute a fade of frame length, from color to another color * Execute a fade of frame length, from color to another color
*
* @param {string} line Line containing a fade initiator
*/ */
fade(line) { fade(line) {
let len = this.fade_count(line); let len = this.fade_count(line);
@ -368,12 +404,18 @@ class Mscript {
} }
/** /**
* Extract the fade length integer from a FADE cmd * Extract the fade length integer from a FADE cmd
*
* @param {string} str Line containing the length of fade in frames
*/ */
fade_count(str) { fade_count(str) {
return parseInt(str.split(' ')[1]); return parseInt(str.split(' ')[1]);
} }
/** /**
* Extract the start color from a string * Extract the start color from a string
*
* @param {string} str Line containing the start color value in a fade initiator
*
* @returns {array} Array containing RGB color values
*/ */
fade_start(str) { fade_start(str) {
let color = str.split(' ')[2]; let color = str.split(' ')[2];
@ -381,6 +423,10 @@ class Mscript {
} }
/** /**
* Extract the end color from a string * Extract the end color from a string
*
* @param {string} str Line containing the end color value in a fade initiator
*
* @returns {array} Array containing RGB color values
*/ */
fade_end(str) { fade_end(str) {
let color = str.split(' ')[3]; let color = str.split(' ')[3];
@ -404,6 +450,11 @@ class Mscript {
} }
return this.rgb_str(cur); return this.rgb_str(cur);
} }
/**
* Parse string into array of RGB color values. 0-255 octet.
*
* @param {string} str String containing only color values as `#,#,#`
**/
rgb(str) { rgb(str) {
let rgb = str.split(','); let rgb = str.split(',');
return rgb.map((char) => { return rgb.map((char) => {
@ -411,14 +462,20 @@ class Mscript {
}); });
} }
/** /**
* Cast RGB color values as string
* *
* @param {array} arr Array to join into string
*
* @returns {string} String of RGB values
**/ **/
rgb_str(arr) { rgb_str(arr) {
return arr.join(','); return arr.join(',');
} }
/** /**
* Increase the state of a specific object, such as the camera/projector, * Increase the state of a specific object, such as the camera/projector,
* by the value defined in val * by the value defined in val.
*
* @param {string} cmd String representing command to interpret and update state
*/ */
update(cmd, val = 1) { update(cmd, val = 1) {
if (cmd === 'END') { if (cmd === 'END') {
@ -486,7 +543,13 @@ class Mscript {
} }
} }
/** /**
* Split string on command, extract any integers from string * Split string on command, turn into array of commands
* as long as count variable. Default 1.
*
* @param {string} str String to split
* @param {string} cmd String representing command to split at
*
* @returns {array} Array containing commands
*/ */
str_to_arr(str, cmd) { str_to_arr(str, cmd) {
const cnt = str.split(cmd); const cnt = str.split(cmd);
@ -504,6 +567,11 @@ class Mscript {
} }
/** /**
* Split a string on a command to extract data for light array * Split a string on a command to extract data for light array
*
* @param {string} str String containing light command
* @param {string} cmd String representing command
*
* @returns {array} An RGB array containing the color values
*/ */
light_to_arr(str, cmd) { light_to_arr(str, cmd) {
const cnt = str.split(cmd); const cnt = str.split(cmd);
@ -532,6 +600,8 @@ class Mscript {
} }
/** /**
* Split a string to extract an rgb color value * Split a string to extract an rgb color value
*
* @param {string} Color string assign to color property
*/ */
light_state(str) { light_state(str) {
//add parsers for other color spaces //add parsers for other color spaces
@ -541,7 +611,7 @@ class Mscript {
/** /**
* Throw an error with specific message * Throw an error with specific message
* *
* @param msg {string} Error message to print * @param {string} msg Error message to print
*/ */
fail(msg) { fail(msg) {
throw new Error(msg); throw new Error(msg);

File diff suppressed because one or more lines are too long

View File

@ -10,6 +10,8 @@ const exec_1 = require("exec");
* --help flag. If they do not exist, log to console * --help flag. If they do not exist, log to console
* *
* @param {string} platform Operating system type * @param {string} platform Operating system type
*
* @returns {object} Object containing path to dependency from `which`, if they exist
**/ **/
async function dependencies(platform) { async function dependencies(platform) {
let obj = {}; let obj = {};

View File

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system/index.ts"],"names":[],"mappings":"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"} {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system/index.ts"],"names":[],"mappings":"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"}

View File

@ -41,6 +41,10 @@ function startsWith(str, target, position) {
} }
/** class Mscript */ /** class Mscript */
class Mscript { class Mscript {
/**
* @constructor
* Create new Mscript interpreter
**/
constructor() { constructor() {
this.output = {}; this.output = {};
} }
@ -65,12 +69,12 @@ class Mscript {
/** /**
* Main function, accepts multi-line string, parses into lines * Main function, accepts multi-line string, parses into lines
* and interprets the instructions from the text. Returns an array * and interprets the instructions from the text. Returns an array
* of steps to be fed into the mcopy. * of steps to be fed into the mcopy sequence.
* *
* @param text {string} Mscript text to interpret * @param {string} text Mscript text to interpret
* @param callback {function} Function to call when string is interpreted * @param {function} callback Function to call when string is interpreted
* *
* returns {object} if callback is not provided * @returns {object} if callback is not provided
*/ */
interpret(text, callback) { interpret(text, callback) {
this.clear(); this.clear();
@ -118,6 +122,10 @@ class Mscript {
//comments //comments
//ignore while parsing //ignore while parsing
} }
else if (startsWith(line, 'ALERT')) {
}
else if (startsWith(line, 'PAUSE')) {
}
} }
this.output.success = true; this.output.success = true;
this.output.arr = this.arr; //all instructions this.output.arr = this.arr; //all instructions
@ -132,6 +140,13 @@ class Mscript {
return this.output; return this.output;
} }
} }
/**
* Interprets variables for complex sequence behavior.
* TODO: Fully implement, add test coverage
*
* @param {string} line Line containing a variable assignment
*
**/
variable(line) { variable(line) {
let parts = line.split('='); let parts = line.split('=');
let key = parts[0]; let key = parts[0];
@ -164,12 +179,21 @@ class Mscript {
} }
//console.dir(this.variables) //console.dir(this.variables)
} }
/**
* Replace variable with value at time of interpretation
* TODO: Implement this please
*
* @param {string} line Line containing variable to be replaced with value
*
* @returns {string} New string to be interpreted
**/
variable_replace(line) { variable_replace(line) {
return line;
} }
/** /**
* Interpret a basic two character command * Interpret a basic two character command
* *
* @param line {string} Line of script to interpret * @param {string} line Line of script to interpret
*/ */
basic_cmd(line) { basic_cmd(line) {
if (this.rec !== -1) { if (this.rec !== -1) {
@ -187,8 +211,8 @@ class Mscript {
/** /**
* Start a new loop * Start a new loop
* *
* @param line {string} Line to evaluate as either loop or fade * @param {string} line Line to evaluate as either loop or fade
* @param fade {boolean} Flag as boolean if true * @param {boolean} fade Flag as boolean if true
*/ */
new_loop(line, fade) { new_loop(line, fade) {
this.rec++; this.rec++;
@ -206,7 +230,7 @@ class Mscript {
/** /**
* Close the most recent loop * Close the most recent loop
* *
* @param line {string} Line to interpret * @param {string} line Line to interpret
*/ */
end_loop(line) { end_loop(line) {
let light_arr; let light_arr;
@ -241,7 +265,7 @@ class Mscript {
/** /**
* Move camera to explicitly-defined frame * Move camera to explicitly-defined frame
* *
* @param line {string} Line to interpret with camera move statement * @param {string} line Line to interpret with camera move statement
*/ */
move_cam(line) { move_cam(line) {
this.target = parseInt(line.split('CAM ')[1]); this.target = parseInt(line.split('CAM ')[1]);
@ -284,6 +308,8 @@ class Mscript {
} }
/** /**
* Move projector to explicitly-defined frame * Move projector to explicitly-defined frame
*
* @param {string} line Line containing `move` statement to interpret
*/ */
move_proj(line) { move_proj(line) {
this.target = parseInt(line.split('PROJ ')[1]); this.target = parseInt(line.split('PROJ ')[1]);
@ -326,6 +352,8 @@ class Mscript {
} }
/** /**
* Set the state of either the cam or projector * Set the state of either the cam or projector
*
* @param line {string} String containing set statement
*/ */
set_state(line) { set_state(line) {
if (startsWith(line, 'SET CAM')) { if (startsWith(line, 'SET CAM')) {
@ -337,24 +365,32 @@ class Mscript {
} }
/** /**
* Return the last loop * Return the last loop
*
* @returns {object}
*/ */
last_loop() { last_loop() {
return this.loops[this.loops.length - 1]; return this.loops[this.loops.length - 1];
} }
/** /**
* Return the second-last loop * Return the second-last loop
*
* @returns {object} Loop array
*/ */
parent_loop() { parent_loop() {
return this.loops[this.loops.length - 2]; return this.loops[this.loops.length - 2];
} }
/** /**
* Extract the loop count integer from a LOOP cmd * Extract the loop count integer from a LOOP cmd
*
* @returns {integer} Loop count in string parsed into integer
*/ */
loop_count(str) { loop_count(str) {
return parseInt(str.split(' ')[1]); return parseInt(str.split(' ')[1]);
} }
/** /**
* Execute a fade of frame length, from color to another color * Execute a fade of frame length, from color to another color
*
* @param {string} line Line containing a fade initiator
*/ */
fade(line) { fade(line) {
let len = this.fade_count(line); let len = this.fade_count(line);
@ -368,12 +404,18 @@ class Mscript {
} }
/** /**
* Extract the fade length integer from a FADE cmd * Extract the fade length integer from a FADE cmd
*
* @param {string} str Line containing the length of fade in frames
*/ */
fade_count(str) { fade_count(str) {
return parseInt(str.split(' ')[1]); return parseInt(str.split(' ')[1]);
} }
/** /**
* Extract the start color from a string * Extract the start color from a string
*
* @param {string} str Line containing the start color value in a fade initiator
*
* @returns {array} Array containing RGB color values
*/ */
fade_start(str) { fade_start(str) {
let color = str.split(' ')[2]; let color = str.split(' ')[2];
@ -381,6 +423,10 @@ class Mscript {
} }
/** /**
* Extract the end color from a string * Extract the end color from a string
*
* @param {string} str Line containing the end color value in a fade initiator
*
* @returns {array} Array containing RGB color values
*/ */
fade_end(str) { fade_end(str) {
let color = str.split(' ')[3]; let color = str.split(' ')[3];
@ -404,6 +450,11 @@ class Mscript {
} }
return this.rgb_str(cur); return this.rgb_str(cur);
} }
/**
* Parse string into array of RGB color values. 0-255 octet.
*
* @param {string} str String containing only color values as `#,#,#`
**/
rgb(str) { rgb(str) {
let rgb = str.split(','); let rgb = str.split(',');
return rgb.map((char) => { return rgb.map((char) => {
@ -411,14 +462,20 @@ class Mscript {
}); });
} }
/** /**
* Cast RGB color values as string
* *
* @param {array} arr Array to join into string
*
* @returns {string} String of RGB values
**/ **/
rgb_str(arr) { rgb_str(arr) {
return arr.join(','); return arr.join(',');
} }
/** /**
* Increase the state of a specific object, such as the camera/projector, * Increase the state of a specific object, such as the camera/projector,
* by the value defined in val * by the value defined in val.
*
* @param {string} cmd String representing command to interpret and update state
*/ */
update(cmd, val = 1) { update(cmd, val = 1) {
if (cmd === 'END') { if (cmd === 'END') {
@ -486,7 +543,13 @@ class Mscript {
} }
} }
/** /**
* Split string on command, extract any integers from string * Split string on command, turn into array of commands
* as long as count variable. Default 1.
*
* @param {string} str String to split
* @param {string} cmd String representing command to split at
*
* @returns {array} Array containing commands
*/ */
str_to_arr(str, cmd) { str_to_arr(str, cmd) {
const cnt = str.split(cmd); const cnt = str.split(cmd);
@ -504,6 +567,11 @@ class Mscript {
} }
/** /**
* Split a string on a command to extract data for light array * Split a string on a command to extract data for light array
*
* @param {string} str String containing light command
* @param {string} cmd String representing command
*
* @returns {array} An RGB array containing the color values
*/ */
light_to_arr(str, cmd) { light_to_arr(str, cmd) {
const cnt = str.split(cmd); const cnt = str.split(cmd);
@ -532,6 +600,8 @@ class Mscript {
} }
/** /**
* Split a string to extract an rgb color value * Split a string to extract an rgb color value
*
* @param {string} Color string assign to color property
*/ */
light_state(str) { light_state(str) {
//add parsers for other color spaces //add parsers for other color spaces
@ -541,7 +611,7 @@ class Mscript {
/** /**
* Throw an error with specific message * Throw an error with specific message
* *
* @param msg {string} Error message to print * @param {string} msg Error message to print
*/ */
fail(msg) { fail(msg) {
throw new Error(msg); throw new Error(msg);

File diff suppressed because one or more lines are too long

View File

@ -10,6 +10,8 @@ const exec_1 = require("exec");
* --help flag. If they do not exist, log to console * --help flag. If they do not exist, log to console
* *
* @param {string} platform Operating system type * @param {string} platform Operating system type
*
* @returns {object} Object containing path to dependency from `which`, if they exist
**/ **/
async function dependencies(platform) { async function dependencies(platform) {
let obj = {}; let obj = {};

View File

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system/index.ts"],"names":[],"mappings":"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"} {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system/index.ts"],"names":[],"mappings":"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"}

View File

@ -64,6 +64,12 @@ class Mscript {
target : number; target : number;
dist : number; dist : number;
variables : any; variables : any;
/**
* @constructor
* Create new Mscript interpreter
**/
constructor () { constructor () {
this.output = {}; this.output = {};
} }
@ -92,12 +98,12 @@ class Mscript {
/** /**
* Main function, accepts multi-line string, parses into lines * Main function, accepts multi-line string, parses into lines
* and interprets the instructions from the text. Returns an array * and interprets the instructions from the text. Returns an array
* of steps to be fed into the mcopy. * of steps to be fed into the mcopy sequence.
* *
* @param text {string} Mscript text to interpret * @param {string} text Mscript text to interpret
* @param callback {function} Function to call when string is interpreted * @param {function} callback Function to call when string is interpreted
* *
* returns {object} if callback is not provided * @returns {object} if callback is not provided
*/ */
interpret (text : string, callback : Function) { interpret (text : string, callback : Function) {
this.clear() this.clear()
@ -139,6 +145,10 @@ class Mscript {
} else if (startsWith(line, '#') || startsWith(line, '//')) { } else if (startsWith(line, '#') || startsWith(line, '//')) {
//comments //comments
//ignore while parsing //ignore while parsing
} else if (startsWith(line, 'ALERT')) {
} else if (startsWith(line, 'PAUSE')) {
} }
} }
@ -155,6 +165,13 @@ class Mscript {
return this.output; return this.output;
} }
} }
/**
* Interprets variables for complex sequence behavior.
* TODO: Fully implement, add test coverage
*
* @param {string} line Line containing a variable assignment
*
**/
variable (line : string) { variable (line : string) {
let parts : string[] = line.split('='); let parts : string[] = line.split('=');
let key : string = parts[0]; let key : string = parts[0];
@ -191,13 +208,22 @@ class Mscript {
} }
//console.dir(this.variables) //console.dir(this.variables)
} }
variable_replace(line : string) {
/**
* Replace variable with value at time of interpretation
* TODO: Implement this please
*
* @param {string} line Line containing variable to be replaced with value
*
* @returns {string} New string to be interpreted
**/
variable_replace(line : string) : string {
return line;
} }
/** /**
* Interpret a basic two character command * Interpret a basic two character command
* *
* @param line {string} Line of script to interpret * @param {string} line Line of script to interpret
*/ */
basic_cmd (line : string) { basic_cmd (line : string) {
if (this.rec !== -1) { if (this.rec !== -1) {
@ -218,8 +244,8 @@ class Mscript {
/** /**
* Start a new loop * Start a new loop
* *
* @param line {string} Line to evaluate as either loop or fade * @param {string} line Line to evaluate as either loop or fade
* @param fade {boolean} Flag as boolean if true * @param {boolean} fade Flag as boolean if true
*/ */
new_loop (line : string, fade? : boolean) { new_loop (line : string, fade? : boolean) {
this.rec++; this.rec++;
@ -237,7 +263,7 @@ class Mscript {
/** /**
* Close the most recent loop * Close the most recent loop
* *
* @param line {string} Line to interpret * @param {string} line Line to interpret
*/ */
end_loop (line : string) { end_loop (line : string) {
let light_arr : any[]; let light_arr : any[];
@ -275,7 +301,7 @@ class Mscript {
/** /**
* Move camera to explicitly-defined frame * Move camera to explicitly-defined frame
* *
* @param line {string} Line to interpret with camera move statement * @param {string} line Line to interpret with camera move statement
*/ */
move_cam (line : string) { move_cam (line : string) {
this.target = parseInt(line.split('CAM ')[1]); this.target = parseInt(line.split('CAM ')[1]);
@ -315,6 +341,8 @@ class Mscript {
} }
/** /**
* Move projector to explicitly-defined frame * Move projector to explicitly-defined frame
*
* @param {string} line Line containing `move` statement to interpret
*/ */
move_proj (line : string) { move_proj (line : string) {
this.target = parseInt(line.split('PROJ ')[1]); this.target = parseInt(line.split('PROJ ')[1]);
@ -354,6 +382,8 @@ class Mscript {
} }
/** /**
* Set the state of either the cam or projector * Set the state of either the cam or projector
*
* @param line {string} String containing set statement
*/ */
set_state (line : string) { set_state (line : string) {
if (startsWith(line, 'SET CAM')) { if (startsWith(line, 'SET CAM')) {
@ -364,24 +394,32 @@ class Mscript {
} }
/** /**
* Return the last loop * Return the last loop
*
* @returns {object}
*/ */
last_loop () { last_loop () : any {
return this.loops[this.loops.length - 1]; return this.loops[this.loops.length - 1];
} }
/** /**
* Return the second-last loop * Return the second-last loop
*
* @returns {object} Loop array
*/ */
parent_loop () { parent_loop () : any {
return this.loops[this.loops.length - 2]; return this.loops[this.loops.length - 2];
} }
/** /**
* Extract the loop count integer from a LOOP cmd * Extract the loop count integer from a LOOP cmd
*
* @returns {integer} Loop count in string parsed into integer
*/ */
loop_count (str : string) { loop_count (str : string) : number {
return parseInt(str.split(' ')[1]); return parseInt(str.split(' ')[1]);
} }
/** /**
* Execute a fade of frame length, from color to another color * Execute a fade of frame length, from color to another color
*
* @param {string} line Line containing a fade initiator
*/ */
fade (line : string) { fade (line : string) {
let len = this.fade_count(line); let len = this.fade_count(line);
@ -396,12 +434,18 @@ class Mscript {
} }
/** /**
* Extract the fade length integer from a FADE cmd * Extract the fade length integer from a FADE cmd
*
* @param {string} str Line containing the length of fade in frames
*/ */
fade_count (str : string) { fade_count (str : string) {
return parseInt(str.split(' ')[1]); return parseInt(str.split(' ')[1]);
} }
/** /**
* Extract the start color from a string * Extract the start color from a string
*
* @param {string} str Line containing the start color value in a fade initiator
*
* @returns {array} Array containing RGB color values
*/ */
fade_start (str : string) : RGB { fade_start (str : string) : RGB {
let color : string = str.split(' ')[2]; let color : string = str.split(' ')[2];
@ -409,6 +453,10 @@ class Mscript {
} }
/** /**
* Extract the end color from a string * Extract the end color from a string
*
* @param {string} str Line containing the end color value in a fade initiator
*
* @returns {array} Array containing RGB color values
*/ */
fade_end (str : string) : RGB { fade_end (str : string) : RGB {
let color : string = str.split(' ')[3]; let color : string = str.split(' ')[3];
@ -431,6 +479,11 @@ class Mscript {
return this.rgb_str(cur); return this.rgb_str(cur);
} }
/**
* Parse string into array of RGB color values. 0-255 octet.
*
* @param {string} str String containing only color values as `#,#,#`
**/
rgb (str : string) : RGB { rgb (str : string) : RGB {
let rgb = str.split(','); let rgb = str.split(',');
return rgb.map( (char : string) => { return rgb.map( (char : string) => {
@ -438,14 +491,20 @@ class Mscript {
}) })
} }
/** /**
* Cast RGB color values as string
* *
* @param {array} arr Array to join into string
*
* @returns {string} String of RGB values
**/ **/
rgb_str (arr : RGB) : string { rgb_str (arr : RGB) : string {
return arr.join(','); return arr.join(',');
} }
/** /**
* Increase the state of a specific object, such as the camera/projector, * Increase the state of a specific object, such as the camera/projector,
* by the value defined in val * by the value defined in val.
*
* @param {string} cmd String representing command to interpret and update state
*/ */
update (cmd : string, val : number = 1) { update (cmd : string, val : number = 1) {
if (cmd === 'END') { if (cmd === 'END') {
@ -500,9 +559,15 @@ class Mscript {
} }
} }
/** /**
* Split string on command, extract any integers from string * Split string on command, turn into array of commands
* as long as count variable. Default 1.
*
* @param {string} str String to split
* @param {string} cmd String representing command to split at
*
* @returns {array} Array containing commands
*/ */
str_to_arr (str : string, cmd : string) : any[] { str_to_arr (str : string, cmd : string) : string[] {
const cnt : string[] = str.split(cmd); const cnt : string[] = str.split(cmd);
let c : number = parseInt(cnt[1]); let c : number = parseInt(cnt[1]);
let arr : any[] = []; let arr : any[] = [];
@ -517,8 +582,13 @@ class Mscript {
} }
/** /**
* Split a string on a command to extract data for light array * Split a string on a command to extract data for light array
*
* @param {string} str String containing light command
* @param {string} cmd String representing command
*
* @returns {array} An RGB array containing the color values
*/ */
light_to_arr (str : string, cmd : string) { light_to_arr (str : string, cmd : string) : RGB {
const cnt : string[] = str.split(cmd); const cnt : string[] = str.split(cmd);
let c : number = parseInt(cnt[1]); let c : number = parseInt(cnt[1]);
let arr : any[] = []; let arr : any[] = [];
@ -542,6 +612,8 @@ class Mscript {
} }
/** /**
* Split a string to extract an rgb color value * Split a string to extract an rgb color value
*
* @param {string} Color string assign to color property
*/ */
light_state (str : string) { light_state (str : string) {
//add parsers for other color spaces //add parsers for other color spaces
@ -552,7 +624,7 @@ class Mscript {
/** /**
* Throw an error with specific message * Throw an error with specific message
* *
* @param msg {string} Error message to print * @param {string} msg Error message to print
*/ */
fail (msg : string) { fail (msg : string) {
throw new Error(msg); throw new Error(msg);
@ -585,4 +657,7 @@ CB - Camera backwards
PB - Projector backwards PB - Projector backwards
BB - Black backwards BB - Black backwards
ALERT {MESSAGE} - Stop the sequence and requiure user interaction to complete
PAUSE # - Pause the sequence for a # of seconds
*/ */

View File

@ -15,6 +15,8 @@ import { exec } from 'exec';
* --help flag. If they do not exist, log to console * --help flag. If they do not exist, log to console
* *
* @param {string} platform Operating system type * @param {string} platform Operating system type
*
* @returns {object} Object containing path to dependency from `which`, if they exist
**/ **/