#!/usr/bin/env nomsu -V2.5.4.3 # This file defines some actions that interact with the operating system and filesystem. use "core" action [path of Nomsu file %filename]: lua> "for i,f in Files.walk(\%filename) do return f end" barf "Could not find file: \%filename" action [sh> %cmd]: lua> ".." local result = io.popen(\%cmd) local contents = result:read("*a") result:close() return contents action [read file %filename] (=lua "Files.read(\%filename)") compile [for file %f in %path %body] to (..) Lua ".." for i,\(%f as lua expr) in Files.walk(\(%path as lua expr)) do \(%body as lua statements) \(compile as (===next %f ===)) end \(compile as (===stop %f ===)) compile [%expr for file %f in %path] to (..) Lua value ".." (function() local ret = list{} for i,\(%f as lua expr) in Files.walk(\(%path as lua expr)) do ret[#ret+1] = \(%expr as lua statements) end return ret end)() action [..] write to file %filename %text, to file %filename write %text write %text to file %filename ..: lua> ".." local file = io.open(\%filename, 'w') file:write(\%text) file:close() action [line number of %pos in %str] (=lua "Files.get_line_number(\%str, \%pos)") action [line %line_num in %str] (=lua "Files.get_line(\%str, \%line_num)") action [source lines of %tree]: %source = (%tree.source if (%tree is syntax tree) else %tree) %file = (read file %source.filename) return (..) (..) (line % in %file) for % in (line number of %source.start in %file) to (..) line number of %source.stop in %file ..joined with "\n"