Skip to content

Commit ac50116

Browse files
committed
template strings
1 parent 4810425 commit ac50116

File tree

2 files changed

+244
-3448
lines changed

2 files changed

+244
-3448
lines changed

Resources/OSL Utils.js

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,33 @@ function autoTokenise(CODE, DELIMITER) {
8989
}
9090
}
9191

92+
function parseTemplate(str) {
93+
let depth = 0;
94+
let cur = '';
95+
const arr = [];
96+
for (let i = 0; i < str.length; i ++) {
97+
if (str[i] + str[i + 1] === '${') {
98+
if (depth === 0) {
99+
arr.push(cur);
100+
cur = "$";
101+
}
102+
depth ++;
103+
continue;
104+
}
105+
if (str[i] === '}') {
106+
depth --
107+
if (depth === 0) {
108+
arr.push(cur + '}');
109+
cur = "";
110+
}
111+
continue;
112+
};
113+
cur += str[i];
114+
}
115+
arr.push(cur);
116+
return arr;
117+
}
118+
92119
function randomString(length) {
93120
let result = "";
94121
let characters =
@@ -555,7 +582,15 @@ class OSLUtils {
555582
console.error(e)
556583
return { type: "unk", data: cur }
557584
}
558-
} else if (cur[0] === "\"" && cur[cur.length - 1] === "\"") return { type: "str", data: cur }
585+
}
586+
else if (cur[0] + cur[cur.length - 1] === '""') return { type: "str", data: cur }
587+
else if (cur[0] + cur[cur.length - 1] === "''") return { type: "str", data: cur }
588+
else if (cur[0] + cur[cur.length - 1] === "``") {
589+
return { type: "tsr", data: parseTemplate(cur.slice(1,-1)).filter(v => v !== "").map(v => {
590+
if (v.startsWith("${")) return this.generateAST({ CODE: v.slice(2, -1), START: 0 })[0]
591+
else return {type: "str", data: v}
592+
}) }
593+
}
559594
else if (!isNaN(+cur)) return { type: "num", data: +cur }
560595
else if (cur === "true" || cur === "false") return { type: "var", data: cur === "true" }
561596
else if (this.operators.indexOf(cur) !== -1) return { type: "opr", data: cur }
@@ -790,7 +825,7 @@ class OSLUtils {
790825

791826
if (ast[0].type === "var" && MAIN) {
792827
ast[0].type = "cmd";
793-
ast[0].source = CODE;
828+
ast[0].source = CODE.split("\n", 1)[0];
794829
}
795830

796831
return ast.filter(token => (
@@ -973,6 +1008,6 @@ if (typeof Scratch !== "undefined") {
9731008
const fs = require("fs");
9741009

9751010
fs.writeFileSync("lol.json", JSON.stringify(utils.generateFullAST({
976-
CODE: fs.readFileSync("/Users/sophie/Origin-OS/OSL Programs/apps/System/Terminal.osl", "utf-8")
1011+
CODE: fs.readFileSync("/Users/sophie/Origin-OS/OSL Programs/apps/Dock/battery.ode", "utf-8")
9771012
}), null, 2));
9781013
}

0 commit comments

Comments
 (0)