summaryrefslogtreecommitdiff
path: root/libregex/redump.myr
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2015-05-01 22:07:13 -0700
committerOri Bernstein <ori@eigenstate.org>2015-05-01 22:07:29 -0700
commit3b5a5cd9b9843d0ba824c756911456d57cf1c1be (patch)
treed2581627161dc93652d9c58308bb7e63ea9c7ce0 /libregex/redump.myr
parent4a2263e9daa8ce34bfb9796b36f23c15d060e306 (diff)
downloadmc-3b5a5cd9b9843d0ba824c756911456d57cf1c1be.tar.gz
Add regex dumper.
Diffstat (limited to 'libregex/redump.myr')
-rw-r--r--libregex/redump.myr52
1 files changed, 52 insertions, 0 deletions
diff --git a/libregex/redump.myr b/libregex/redump.myr
new file mode 100644
index 0000000..bf52057
--- /dev/null
+++ b/libregex/redump.myr
@@ -0,0 +1,52 @@
+use std
+use bio
+use regex
+
+const main = {args
+ var cmd, opts
+ var fd
+
+ opts = [
+ .argdesc = "regex [inputs...]",
+ .minargs = 1
+ ]
+ cmd = std.optparse(args, &opts)
+ match regex.dbgcompile(cmd.args[0])
+ | `std.Fail m:
+ std.fatal(1, "unable to compile regex: %s\n", regex.failmsg(m))
+ | `std.Ok re:
+ if cmd.args.len > 1
+ runall(re, cmd.args)
+ else
+ fd = bio.mkfile(0, bio.Rd)
+ dump(re, fd)
+ bio.close(fd)
+ ;;
+ ;;
+}
+
+const runall = {re, files
+
+ for f in files
+ match bio.open(f, bio.Rd)
+ | `std.Some fd:
+ dump(re, fd)
+ bio.close(fd)
+ | `std.None:
+ std.fatal(1, "failed to open %s\n", f)
+ ;;
+ ;;
+}
+
+const dump = {re, fd
+ while true
+ match bio.readln(fd)
+ | `std.Some ln:
+ regex.exec(re, ln)
+ std.slfree(ln)
+ | `std.None:
+ break
+ ;;
+ ;;
+}
+