@@ -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+
92119function 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