From e0149a6043efee80aaecd7f3b3bd26e06d4ee915 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 5 May 2012 16:00:25 -0700 Subject: [PATCH] Add command line parsing --- src/servo/opts.rs | 47 ++++++++++++++++++++++++++++++++++++++++++++++ src/servo/servo.rc | 1 + src/servo/servo.rs | 7 ++++++- 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/servo/opts.rs diff --git a/src/servo/opts.rs b/src/servo/opts.rs new file mode 100644 index 00000000000..a9ab9cbe887 --- /dev/null +++ b/src/servo/opts.rs @@ -0,0 +1,47 @@ +#[doc = " + +Configuration options for a single run of the servo application. Created +from command line arguments. + +"]; + +type opts = { + urls: [str], + render_mode: render_mode +}; + +enum render_mode { + screen, + file(str) +} + +fn from_cmdline_args(args: [str]) -> opts { + import std::getopts; + + let args = args.tail(); + + let opts = [ + getopts::optopt("o") + ]; + + let match = alt getopts::getopts(args, opts) { + result::ok(m) { m } + result::err(f) { fail getopts::fail_str(f) } + }; + + let urls = if match.free.is_empty() { + fail "servo asks that you provide 1 or more URLs" + } else { + match.free + }; + + let render_mode = alt getopts::opt_maybe_str(match, "o") { + some(output_file) { file(output_file) } + none { screen } + }; + + { + urls: urls, + render_mode: render_mode + } +} diff --git a/src/servo/servo.rc b/src/servo/servo.rc index 37175d56bbb..a90fdb52072 100755 --- a/src/servo/servo.rc +++ b/src/servo/servo.rc @@ -49,3 +49,4 @@ mod util { } mod content; +mod opts; \ No newline at end of file diff --git a/src/servo/servo.rs b/src/servo/servo.rs index 90348c5c5d8..f8eff58fe46 100644 --- a/src/servo/servo.rs +++ b/src/servo/servo.rs @@ -6,6 +6,11 @@ import gfx::renderer; import platform::osmain; fn main(args: [str]) { + run(opts::from_cmdline_args(args)) +} + +fn run(opts: opts::opts) { + // The platform event handler thread let osmain = osmain::osmain(); @@ -23,7 +28,7 @@ fn main(args: [str]) { let content = content::content(layout); // Send each file to render then wait for keypress - for args.tail().each { |filename| + for opts.urls.each { |filename| #debug["master: Sending filename `%s`", filename]; content.send(content::parse(filename)); #debug["master: Waiting for keypress"];