diff options
author | Ori Bernstein <ori@eigenstate.org> | 2015-05-01 22:07:13 -0700 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2015-05-01 22:07:29 -0700 |
commit | 3b5a5cd9b9843d0ba824c756911456d57cf1c1be (patch) | |
tree | d2581627161dc93652d9c58308bb7e63ea9c7ce0 /libregex/redump.myr | |
parent | 4a2263e9daa8ce34bfb9796b36f23c15d060e306 (diff) | |
download | mc-3b5a5cd9b9843d0ba824c756911456d57cf1c1be.tar.gz |
Add regex dumper.
Diffstat (limited to 'libregex/redump.myr')
-rw-r--r-- | libregex/redump.myr | 52 |
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 + ;; + ;; +} + |