css: fn[ temp[ { ] {: fn[ >q ^[ @ ] " {" /nl q> Array .[ of pairs ] each[ .[ 0 at ^[ >k ] 1 at ^[ >v ] ] " " k ": " v ";" /nl ] "}" /nl ] Array .of .[ "" join ] ] Theme: is-obj[ theme: fn[ av: <-[ swap ] a: <-[ swap ] fg: <-[ swap ] bg: <-[ swap ] ] aqua: fn[ "#191e2a" "#21ef9f" "aqua" "#32e6e6" theme ] forest: fn[ "#191e2a" "#daffac" "#32e667" "#32e667" theme ] qbasic: fn[ "#0000aa" "#e8e8e8" "#aaaaaa" "#aaaaaa" theme ] stark: fn[ "black" "white" "white" "grey" theme ] ] project[ css-test: cmd[ Theme .aqua style.css.stk: css[ StackTalk .load-file ] /l ] build: cmd[ Array .new >pages "**/*.pstk" Directory .glob each[ if[ dup .file? :then pages .push :else void ] ] "@pages/web.stk" StackTalk .load-file #page: module/extend[ style.css.stk: ^[ Theme .aqua css[ StackTalk .load-file ] ] >style ] #markup: module/extend[ link: fryn[ " " write @link> " " write ] ] source-of: fn[ .[ Path .[ "." of[ path name ] relative ] ] ] dest-of: fn[ .[ Path .[ "." of[ path name Path .parse .name ".html" + ] relative "content/" "site/" String .replace ] ] ] NB[ Directory .[ try[ site: rmr :catch void ] static: site: copy ] ] Set .of[ pages each[ dest-of Path .parse .dir ] ] >destFolders destFolders each[ Directory .ensure ] pages each[ >p p. dest-of p> source-of /t StackTalk .load-file ] ] ]