aboutsummaryrefslogtreecommitdiff
path: root/docs/bqn.js
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-14 22:16:10 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-14 22:16:10 -0400
commitc04ec4914b6be77d29acc15915b60c072baa6849 (patch)
tree0f9d8944f79e78f39efc6ebf45bf9f8eb0b41810 /docs/bqn.js
parent7669c49a00a75c711b0f23bea09e3532f3af5e32 (diff)
Allow running bqn.js on a file argument
Diffstat (limited to 'docs/bqn.js')
-rwxr-xr-xdocs/bqn.js31
1 files changed, 23 insertions, 8 deletions
diff --git a/docs/bqn.js b/docs/bqn.js
index 20b76b0c..4af176a6 100755
--- a/docs/bqn.js
+++ b/docs/bqn.js
@@ -316,10 +316,11 @@ let unixtime = (x,w) => Date.now()/1000;
let req1str = (e,x,w) => {
if (!isstr(x)) throw Error(e+" 𝕩: 𝕩 must be a string");
if (has(w)) throw Error(e+": 𝕨 not allowed");
+ return x.join("");
}
let dojs = (x,w) => {
- req1str("•JS",x,w);
- let r = Function("'use strict'; return ("+x.join("")+")")();
+ let s = req1str("•JS",x,w);
+ let r = Function("'use strict'; return ("+s+")")();
let toBQN = x => {
if (isnum(x)) return x;
if (typeof x==='string') { if (Array.from(x).length!==1) throw Error("•JS: JS strings are one character; use Array.from for BQN strings"); return x; }
@@ -330,7 +331,7 @@ let dojs = (x,w) => {
return toBQN(r);
}
let sysvals = {
- bqn:(x,w)=>{req1str("•BQN",x,w);return bqn(x);}, js:dojs,
+ bqn:(x,w)=> bqn(req1str("•BQN",x,w)), js:dojs,
type, glyph, decompose, fmt:fmt1, unixtime,
listsys: () => list(Object.keys(sysvals).map(str).sort())
};
@@ -364,16 +365,30 @@ if (typeof module!=='undefined') { // Node.js
let show = x => console.log(fmt(x));
sysvals.show = (x,w) => { show(x); return x; };
- sysvals.out = (x,w) => { req1str("•Out",x,w);console.log(x.join("")); return x; };
+ sysvals.out = (x,w) => { console.log(req1str("•Out",x,w)); return x; };
if (!module.parent) {
let args = process.argv.slice(2);
- args.map(a=>{
+ let arg0 = args[0];
+ let exec = fn => src => {
try {
- show(bqn(a));
+ fn(bqn(src));
} catch(e) {
- console.error(''+fmtErr(Array.from(a),e)+'');
+ console.error(''+fmtErr(Array.from(src),e)+'');
}
- });
+ }
+ if (arg0[0] !== '-' || (arg0==='-f'&&(arg0=(args=args.slice(1))[0],1))) {
+ sysvals.args = list(args.slice(1).map(str));
+ let res = require('path').resolve;
+ let fread = require('fs').readFileSync;
+ let path = res(arg0,'..');
+ let read = f => fread(f,'utf-8');
+ sysvals.path = str(path);
+ sysvals.flines = (x,w) =>
+ list(read(res(path,req1str("•FLines",x,w))).split('\n').map(str));
+ exec(r=>r)(read(res(arg0)));
+ } else if (arg0 === '-e') {
+ args.slice(1).map(exec(show));
+ }
}
}