aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/text.nom18
-rw-r--r--lib/os.nom10
2 files changed, 28 insertions, 0 deletions
diff --git a/core/text.nom b/core/text.nom
index 840a596..37b8082 100644
--- a/core/text.nom
+++ b/core/text.nom
@@ -26,6 +26,24 @@ action [lines in %text, lines of %text]
end
return result
+compile [for %match where %text matches %patt %body] to
+ Lua ".."
+ for \(%match as lua expr) in \(%text as lua expr):gmatch(\(%patt as lua expr)) do
+ \(%body as lua statements)
+ \(compile as: === next %match ===)
+ end
+ \(compile as: === stop %match ===)
+
+compile [%expr for %match where %text matches %patt] to
+ Lua value ".."
+ (function()
+ local ret = list{}
+ for \(%match as lua expr) in \(%text as lua expr):gmatch(\(%patt as lua expr)) do
+ ret[#ret+1] = \(%expr as lua statements)
+ end
+ return ret
+ end)()
+
# Text literals
lua> ".."
do
diff --git a/lib/os.nom b/lib/os.nom
index 25b47b6..ee8b79b 100644
--- a/lib/os.nom
+++ b/lib/os.nom
@@ -23,6 +23,16 @@ compile [for file %f in %path %body] to
end
\(compile as: === stop %f ===)
+compile [%expr for file %f in %path] to
+ Lua value ".."
+ (function()
+ local ret = list{}
+ for \(%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]
lua> ".."
local file = io.open(\%filename, 'w')