commit ba0283a1e7dbdec88fabc67bd49f1bdf3aca14d0 Author: Danilo Bargen Date: Tue Dec 29 10:22:37 2015 +0100 Initial version: Simply print content without formatting diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6262ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +target +*.swp diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..1411234 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,12 @@ +[root] +name = "tldr" +version = "0.1.0" +dependencies = [ + "ansi_term 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ansi_term" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..fa72330 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "tldr" +version = "0.1.0" +authors = ["Danilo Bargen "] + +[dependencies] +ansi_term = "^0.7" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..60c59c1 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,74 @@ +extern crate ansi_term; + +use std::io::{BufRead, BufReader}; +use std::fs::File; +use std::{env, process}; + + +enum LineType { + Title(String), + Empty(String), + Description(String), + ExampleText(String), + ExampleCode(String), +} + +struct Tokenizer { + reader: R, + current_line: String, +} + +impl Tokenizer where R: BufRead { + + fn new(reader: R) -> Tokenizer { + Tokenizer { + reader: reader, + current_line: String::new(), + } + } + + fn next(&mut self) -> Option<&str> { + self.current_line.clear(); + let bytes_read = self.reader.read_line(&mut self.current_line).unwrap(); + match bytes_read { + 0 => None, + _ => Some(&self.current_line), + } + } + +} + +/// Open file, return a `BufRead` instance +fn get_file_reader(filepath: &str) -> Result, String> { + let file = try!( + File::open(filepath) + .map_err(|msg| format!("Could not open file: {}", msg)) + ); + Ok(BufReader::new(file)) +} + + +fn main() { + + // Parse arguments + let args: Vec<_> = env::args().collect(); + if args.len() != 2 { + println!("Usage: {} ", args[0]); + process::exit(1); + } + + // Open file + let reader = get_file_reader(&args[1]).unwrap_or_else(|msg| { + println!("{}", msg); + process::exit(1); + }); + + // Create tokenizer + let mut tokenizer = Tokenizer::new(reader); + + // Tokenize and print output + while let Some(token) = tokenizer.next() { + print!("{}", token); + } + +}