about summary refs log tree commit diff
path: root/tools/cheddar/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tools/cheddar/src/main.rs')
-rw-r--r--tools/cheddar/src/main.rs57
1 files changed, 27 insertions, 30 deletions
diff --git a/tools/cheddar/src/main.rs b/tools/cheddar/src/main.rs
index 01e6c868f7a9..9e16b1de439b 100644
--- a/tools/cheddar/src/main.rs
+++ b/tools/cheddar/src/main.rs
@@ -1,3 +1,4 @@
+use clap::{Arg, App};
 use comrak::arena_tree::Node;
 use comrak::nodes::{Ast, AstNode, NodeValue, NodeCodeBlock, NodeHtmlBlock};
 use comrak::{Arena, parse_document, format_html, ComrakOptions};
@@ -72,35 +73,6 @@ struct Args {
     lang_override: Option<&'static str>,
 }
 
-/// Parse the command-line flags passed to cheddar to determine
-/// whether it is running in about-filter mode (`--about-filter`) and
-/// what file extension has been supplied.
-fn parse_args() -> Args {
-    let mut args = Args::default();
-
-    for (i, arg) in env::args().enumerate() {
-        if i == 0 {
-            continue;
-        }
-
-        if arg == "--about-filter" {
-            args.about_filter = true;
-            continue;
-        }
-
-        if let Some(lang) = (*FILENAME_OVERRIDES).get(arg.as_str()) {
-            args.lang_override = Some(lang);
-        }
-
-        args.extension = Path::new(&arg)
-            .extension()
-            .and_then(OsStr::to_str)
-            .map(|s| s.to_string());
-    }
-
-    return args
-}
-
 fn should_continue(res: &io::Result<usize>) -> bool {
     match *res {
         Ok(n) => n > 0,
@@ -312,7 +284,32 @@ fn format_code(args: &Args) {
 }
 
 fn main() {
-    let args = parse_args();
+    // Parse the command-line flags passed to cheddar to determine
+    // whether it is running in about-filter mode (`--about-filter`)
+    // and what file extension has been supplied.
+    let matches = App::new("cheddar")
+        .about("TVL's syntax highlighter")
+        .arg(Arg::with_name("about-filter")
+             .help("Run as a cgit about-filter (renders Markdown)")
+             .long("about-filter")
+             .takes_value(false))
+        .arg(Arg::with_name("filename")
+             .help("File to render")
+             .index(1))
+        .get_matches();
+
+    let mut args = Args::default();
+    args.about_filter = matches.is_present("about-filter");
+
+    let filename = matches.value_of("filename").expect("filename is required");
+    if let Some(lang) = (*FILENAME_OVERRIDES).get(filename) {
+        args.lang_override = Some(lang);
+    }
+
+    args.extension = Path::new(&filename)
+        .extension()
+        .and_then(OsStr::to_str)
+        .map(|s| s.to_string());
 
     match args.extension.as_ref().map(String::as_str) {
         Some("md") if args.about_filter => format_markdown(),