Maj de sheebr + maj mineure des scripts
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
const { Lexer } = require('../lib/sheebr/lexer')
|
||||
const { getline } = require('../lib/sheebr/utils')
|
||||
const fs = require('fs')
|
||||
const environment = require('../lib/sheebr/environment')
|
||||
let environment = require('../lib/sheebr/environment')
|
||||
let aliases = require("../lib/sheebr/aliases")
|
||||
const readline = require('readline').createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout,
|
||||
@@ -19,6 +20,7 @@ async function start(){
|
||||
while(true){
|
||||
input = await getline("sheebr> ");
|
||||
if(input == "exit") break;
|
||||
if(input == "") continue;
|
||||
else evaluate(input);
|
||||
}
|
||||
}
|
||||
@@ -26,16 +28,40 @@ async function start(){
|
||||
function evaluate(input){
|
||||
let lexer = new Lexer(input)
|
||||
args = lexer.scanTokens()
|
||||
|
||||
if(args[0] == "cd"){
|
||||
if(args.length != 2){
|
||||
console.log("Wrong number of arguments"); return;}
|
||||
if(!fs.existsSync(args[1])){console.log("Folder does not exist"); return;}
|
||||
current_dir = args[1][0] == "/" ? args[1] : current_dir + '/' + args[1];
|
||||
console.log(current_dir)
|
||||
return;
|
||||
args = evaluateAliases(args)
|
||||
args = evaluateEnvironmentVariables(args);
|
||||
switch(args[0]){
|
||||
case "cd":
|
||||
if(args.length != 2){
|
||||
console.log("Wrong number of arguments"); return;}
|
||||
if(!fs.existsSync(args[1])){console.log("Folder does not exist"); return;}
|
||||
current_dir = args[1][0] == "/" ? args[1] : current_dir + '/' + args[1];
|
||||
//console.log(current_dir)
|
||||
break;
|
||||
case "set":
|
||||
environment[args[1]] = args[2];
|
||||
break;
|
||||
case "alias":
|
||||
if(args.length == 1) console.log(aliases);
|
||||
else if(args.length == 2){
|
||||
console.error("Wrong number of argument")
|
||||
}
|
||||
else{
|
||||
aliases[args[1]] = args[2].split(" ")
|
||||
}
|
||||
break;
|
||||
case "clear":
|
||||
console.clear();
|
||||
break;
|
||||
default:
|
||||
evaluateProgram(args)
|
||||
}
|
||||
// check for all folders in path
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function evaluateProgram(args){
|
||||
|
||||
let found = false;
|
||||
for(let path of environment.path){
|
||||
@@ -43,7 +69,7 @@ function evaluate(input){
|
||||
const files = fs.readdirSync(path);
|
||||
if(files.includes(`${args[0]}.js`)){
|
||||
found = true;
|
||||
script = execSync(`node ${path + '/' + args[0]}.js ${args.map(arg => {return arg.includes(' ') ? `"${arg}"` : arg}).join(' ')}`, {cwd: current_dir});
|
||||
script = execSync(`node ${path + '/' + args[0]}.js ${args.map(arg => {return arg.includes(' ') ? `"${arg}"` : arg}).join(' ')}`, {cwd: current_dir, env: environment});
|
||||
process.stdout.write(script)
|
||||
tobreak = true;
|
||||
}
|
||||
@@ -53,8 +79,27 @@ function evaluate(input){
|
||||
if(!found){
|
||||
console.log("Program not found")
|
||||
}
|
||||
let program = args[0]
|
||||
}
|
||||
|
||||
function evaluateEnvironmentVariables(args){
|
||||
let newArgs = []
|
||||
for(let arg of args){
|
||||
if(arg.startsWith('$')){
|
||||
if (arg.slice(1) in environment)
|
||||
newArgs.push(JSON.stringify(environment[arg.slice(1)]));
|
||||
else
|
||||
console.error(`variable ${arg.slice(1)} does not exist.`);
|
||||
}
|
||||
else{
|
||||
newArgs.push(arg)
|
||||
}
|
||||
}
|
||||
return newArgs;
|
||||
}
|
||||
|
||||
|
||||
function evaluateAliases(args){
|
||||
if(args[0] in aliases){
|
||||
return aliases[args[0]].concat(args.slice(1))
|
||||
}
|
||||
return args;
|
||||
}
|
||||
Reference in New Issue
Block a user