37 lines
1 KiB
JavaScript
37 lines
1 KiB
JavaScript
|
import * as path from "path";
|
||
|
|
||
|
function join(p1,p2){
|
||
|
if(p2.startsWith("/"))return p2;
|
||
|
return path.join(p1,"..",p2);
|
||
|
}
|
||
|
function unComment(str){
|
||
|
let out = "";
|
||
|
let inK = false;
|
||
|
for (let i = 0; i < str.length; i++) {
|
||
|
if(str[i] == "\\"){
|
||
|
out+=str[i+1]??"";
|
||
|
i+=2;
|
||
|
}else if(str[i] == "\""){
|
||
|
inK = !inK;
|
||
|
out += str[i];
|
||
|
}else if(str[i] == ";" || str[i] == " "){
|
||
|
if(inK)out += str[i];
|
||
|
else break;
|
||
|
}else{
|
||
|
out += str[i];
|
||
|
}
|
||
|
}
|
||
|
return out.trim();
|
||
|
}
|
||
|
|
||
|
export default (str,filename,readFile)=>str.split("\n").map(d=>d.trim()).map((l,i)=>{
|
||
|
if(!l.startsWith("#"))return l;
|
||
|
if(l.startsWith("#import")){
|
||
|
let toImport = unComment(l.substring(8).trim());
|
||
|
if(toImport.startsWith("\"") && toImport.startsWith("\"")){
|
||
|
return readFile(join(filename,toImport.slice(1,-1)),i);
|
||
|
}else{
|
||
|
return readFile("lisp/"+toImport+".lisp",i);
|
||
|
}
|
||
|
}
|
||
|
}).join("\n");
|