module shlex_main; import std.stdio; import std.typecons; import std.file; import std.utf; import std.array; import std.algorithm; import shlex; // TODO: inefficient. auto readFile(File file) { return file.byLine(Yes.keepTerminator).join; } void main(string[] args) { auto provider = new ShlexProviderStream!(char[]).ShlexProvider; alias ParamsType = ShlexProviderStream!(char[]).ShlexParams.WithDefaults; ParamsType params; if (args.length == 1) { ParamsType p = {instream: stdin.readFile, infile: Nullable!string.init}; params = p; } else { immutable filename = args[1]; scope File file = File(filename, "r"); ParamsType p = {instream: file.readFile, infile: nullable(filename)}; params = p; } Shlex *shlex = provider.callWithDefaults(params); _printTokens(*shlex); }